From 48cbc55109da9df60e9035b0210d14164496a68c Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 1 Sep 2026 11:27:39 -0700 Subject: [PATCH 01/27] Make PetscMatrixShellMatrix instantiable --- include/numerics/petsc_matrix_shell_matrix.h | 21 ++++ src/numerics/petsc_matrix_shell_matrix.C | 110 +++++++++++++++++++ 2 files changed, 131 insertions(+) diff --git a/include/numerics/petsc_matrix_shell_matrix.h b/include/numerics/petsc_matrix_shell_matrix.h index 7ef5e11faf0..1b79511631e 100644 --- a/include/numerics/petsc_matrix_shell_matrix.h +++ b/include/numerics/petsc_matrix_shell_matrix.h @@ -58,6 +58,27 @@ class PetscMatrixShellMatrix : public PetscMatrixBase virtual bool require_sparsity_pattern() const override { return false; } + virtual void zero() override; + virtual std::unique_ptr> zero_clone() const override; + virtual std::unique_ptr> clone() const override; + virtual void set(const numeric_index_type i, const numeric_index_type j, const T value) override; + virtual void add(const numeric_index_type i, const numeric_index_type j, const T value) override; + virtual void add_matrix(const DenseMatrix & dm, + const std::vector & rows, + const std::vector & cols) override; + virtual void add_matrix(const DenseMatrix & dm, + const std::vector & dof_indices) override; + virtual void add(const T a, const SparseMatrix & X) override; + virtual T operator()(const numeric_index_type i, const numeric_index_type j) const override; + virtual Real l1_norm() const override; + virtual Real linfty_norm() const override; + virtual void print_personal(std::ostream & os = libMesh::out) const override; + virtual void get_diagonal(NumericVector & dest) const override; + virtual void get_transpose(SparseMatrix & dest) const override; + virtual void get_row(numeric_index_type i, + std::vector & indices, + std::vector & values) const override; + private: // Make this private because we mark as initialized after we've done our initialization, and we // don't want derived classes to mistakenly register their data as initialized (or not) diff --git a/src/numerics/petsc_matrix_shell_matrix.C b/src/numerics/petsc_matrix_shell_matrix.C index 5b089db2c26..5b1c22b6308 100644 --- a/src/numerics/petsc_matrix_shell_matrix.C +++ b/src/numerics/petsc_matrix_shell_matrix.C @@ -54,6 +54,116 @@ PetscMatrixShellMatrix::init(ParallelType libmesh_dbg_var(type)) this->set_context(); } +template +void +PetscMatrixShellMatrix::zero() +{ + libmesh_error(); +} + +template +std::unique_ptr> +PetscMatrixShellMatrix::zero_clone() const +{ + libmesh_error(); +} + +template +std::unique_ptr> +PetscMatrixShellMatrix::clone() const +{ + libmesh_not_implemented(); +} + +template +void +PetscMatrixShellMatrix::set(const numeric_index_type, const numeric_index_type, const T) +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::add(const numeric_index_type, const numeric_index_type, const T) +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::add_matrix(const DenseMatrix &, + const std::vector &, + const std::vector &) +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::add_matrix(const DenseMatrix &, + const std::vector &) +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::add(const T, const SparseMatrix &) +{ + libmesh_error(); +} + +template +T +PetscMatrixShellMatrix::operator()(const numeric_index_type, const numeric_index_type) const +{ + libmesh_error(); +} + +template +Real +PetscMatrixShellMatrix::l1_norm() const +{ + libmesh_error(); +} + +template +Real +PetscMatrixShellMatrix::linfty_norm() const +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::print_personal(std::ostream &) const +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::get_diagonal(NumericVector &) const +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::get_transpose(SparseMatrix &) const +{ + libmesh_error(); +} + +template +void +PetscMatrixShellMatrix::get_row(numeric_index_type, + std::vector &, + std::vector &) const +{ + libmesh_error(); +} + template class LIBMESH_EXPORT PetscMatrixShellMatrix; } // namespace libMesh From 26cb8a33b0fb9cdb5b0cab6aae2cefffc3a88e66 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 1 Sep 2026 11:29:09 -0700 Subject: [PATCH 02/27] Fix PetscMFFDMatrix Mat assignment Importantly this both sets the wrapper as initialized and instructs the wrapper not to destroy the PETSc matrix on exit Co-Authored-By: Claude --- include/numerics/petsc_mffd_matrix.h | 19 +++++++++++++++---- include/solvers/petsc_nonlinear_solver.h | 3 --- src/solvers/petsc_nonlinear_solver.C | 7 ++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/include/numerics/petsc_mffd_matrix.h b/include/numerics/petsc_mffd_matrix.h index 17bcb5d6f72..a3447e0bbe0 100644 --- a/include/numerics/petsc_mffd_matrix.h +++ b/include/numerics/petsc_mffd_matrix.h @@ -48,7 +48,15 @@ class PetscMFFDMatrix : public PetscMatrixBase explicit PetscMFFDMatrix(const Parallel::Communicator & comm_in); - PetscMFFDMatrix & operator=(Mat m); + /** + * Adopt an existing, externally-owned Mat, without destroying it when this + * object goes out of scope. \p set_context controls whether we attach a + * context pointer to \p m allowing \p get_context() to recover this object + * from the Mat later; skip this when this wrapper is short-lived (e.g. a + * function-local variable) so we don't leave a dangling context on \p m + * after we're destroyed. + */ + void assign(Mat m, bool set_context); virtual void init(const numeric_index_type, const numeric_index_type, @@ -101,11 +109,14 @@ PetscMFFDMatrix::PetscMFFDMatrix(const Parallel::Communicator & comm_in) } template -PetscMFFDMatrix & -PetscMFFDMatrix::operator=(Mat m) +void +PetscMFFDMatrix::assign(Mat m, bool set_context) { this->_mat = m; - return *this; + this->_is_initialized = true; + this->_destroy_mat_on_exit = false; + if (set_context) + this->set_context(); } template diff --git a/include/solvers/petsc_nonlinear_solver.h b/include/solvers/petsc_nonlinear_solver.h index 04ccd4bf8fd..52ede6c7483 100644 --- a/include/solvers/petsc_nonlinear_solver.h +++ b/include/solvers/petsc_nonlinear_solver.h @@ -291,9 +291,6 @@ class PetscNonlinearSolver : public NonlinearSolver PetscDMWrapper _dm_wrapper; #endif - /// Wrapper for matrix-free finite-difference Jacobians - PetscMFFDMatrix _mffd_jac; - private: friend ResidualContext libmesh_petsc_snes_residual_helper (SNES snes, Vec x, void * ctx); friend PetscErrorCode libmesh_petsc_snes_residual (SNES snes, Vec x, Vec r, void * ctx); diff --git a/src/solvers/petsc_nonlinear_solver.C b/src/solvers/petsc_nonlinear_solver.C index 4cc0ccd6d4b..29c1a6211a0 100644 --- a/src/solvers/petsc_nonlinear_solver.C +++ b/src/solvers/petsc_nonlinear_solver.C @@ -450,7 +450,9 @@ extern "C" { libmesh_assert(!Jac); Jac = &mffd_jac; - mffd_jac = jac; + // mffd_jac is function-local, so don't attach a context to jac here -- it would + // dangle once mffd_jac is destroyed at the end of this call. + mffd_jac.assign(jac, /*set_context=*/false); } // We already computed the Jacobian during the residual evaluation @@ -696,8 +698,7 @@ PetscNonlinearSolver::PetscNonlinearSolver (sys_type & system_in) : _default_monitor(true), _snesmf_reuse_base(true), _computing_base_vector(true), - _setup_reuse(false), - _mffd_jac(this->_communicator) + _setup_reuse(false) { } From ab2c05bba0ed9e74399e593455586d2e1df3e365 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 1 Sep 2026 12:12:51 -0700 Subject: [PATCH 03/27] Add two-matrix arg solve overload to NonlinearSolver Co-Authored-By: Claude --- include/solvers/nonlinear_solver.h | 17 +++++++++++++++++ include/solvers/petsc_nonlinear_solver.h | 18 +++++++++++++++--- include/systems/nonlinear_implicit_system.h | 18 +++++++++++++++++- src/solvers/petsc_nonlinear_solver.C | 15 ++++++++++++++- src/systems/nonlinear_implicit_system.C | 21 ++++++++++++++++----- 5 files changed, 79 insertions(+), 10 deletions(-) diff --git a/include/solvers/nonlinear_solver.h b/include/solvers/nonlinear_solver.h index 19947d629ba..9a746c2e75f 100644 --- a/include/solvers/nonlinear_solver.h +++ b/include/solvers/nonlinear_solver.h @@ -102,6 +102,23 @@ class NonlinearSolver : public ReferenceCountedObject>, const double, // Stopping tolerance const unsigned int) = 0; // N. Iterations + /** + * Solves the nonlinear system using \p jac_in as the actual Jacobian operator and \p pre_in as + * the preconditioning matrix -- which may be the same object (the common case) or genuinely + * distinct (e.g. a matrix-free operator paired with an assembled preconditioning matrix). The + * default implementation ignores \p jac_in and simply forwards to the single-matrix solve(), + * for solver backends that do not distinguish between the two. + */ + virtual std::pair solve (SparseMatrix & /* jac_in */, + SparseMatrix & pre_in, + NumericVector & x_in, + NumericVector & r_in, + const double tol, + const unsigned int m_its) + { + return this->solve(pre_in, x_in, r_in, tol, m_its); + } + /** * Prints a useful message about why the latest nonlinear solve * con(di)verged. diff --git a/include/solvers/petsc_nonlinear_solver.h b/include/solvers/petsc_nonlinear_solver.h index 52ede6c7483..a478b3c7c1f 100644 --- a/include/solvers/petsc_nonlinear_solver.h +++ b/include/solvers/petsc_nonlinear_solver.h @@ -107,11 +107,23 @@ class PetscNonlinearSolver : public NonlinearSolver SNES snes(const char * name = nullptr); /** - * Call the Petsc solver. It calls the method below, using the - * same matrix for the system and preconditioner matrices. + * Call the Petsc solver, using the same matrix for the system and preconditioner matrices. Calls + * the two-matrix overload below with \p pre_in for both. */ virtual std::pair - solve (SparseMatrix &, // System Jacobian Matrix + solve (SparseMatrix & pre_in, // System Preconditioning Matrix + NumericVector &, // Solution vector + NumericVector &, // Residual vector + const double, // Stopping tolerance + const unsigned int) override; // N. Iterations + + /** + * Call the Petsc solver, using \p jac_in as the actual SNES Jacobian operator (Amat) and + * \p pre_in as the preconditioning matrix (Pmat). + */ + virtual std::pair + solve (SparseMatrix & jac_in, // Jacobian operator matrix (Amat) + SparseMatrix & pre_in, // Preconditioning matrix (Pmat) NumericVector &, // Solution vector NumericVector &, // Residual vector const double, // Stopping tolerance diff --git a/include/systems/nonlinear_implicit_system.h b/include/systems/nonlinear_implicit_system.h index a8eeae8bbcd..ea3e626cddd 100644 --- a/include/systems/nonlinear_implicit_system.h +++ b/include/systems/nonlinear_implicit_system.h @@ -257,10 +257,20 @@ class NonlinearImplicitSystem : public ImplicitSystem virtual void reinit () override; /** - * Assembles & solves the nonlinear system R(x) = 0. + * Assembles & solves the nonlinear system R(x) = 0. If a matrix has been registered via + * set_operator_matrix(), it is used as the actual Jacobian operator (Amat) while \p matrix + * remains the preconditioning matrix (Pmat); otherwise \p matrix is used for both, as usual. */ virtual void solve () override; + /** + * Set a matrix to use as the actual Jacobian operator (Amat) on the next solve(), distinct from + * \p matrix, which continues to be used as the preconditioning matrix (Pmat). Pass nullptr (the + * default) to restore the ordinary behavior of using \p matrix for both. Only solve() itself + * reads this value back, so there is no public getter. + */ + void set_operator_matrix(SparseMatrix * mat) { _operator_matrix = mat; } + /** * \returns An integer corresponding to the upper iteration count * limit and a Real corresponding to the convergence tolerance to @@ -335,6 +345,12 @@ class NonlinearImplicitSystem : public ImplicitSystem * The final residual for the nonlinear system R(x) */ Real _final_nonlinear_residual; + + /** + * An optional matrix to use as the actual Jacobian operator (Amat), distinct from \p matrix + * (used as the preconditioning matrix, Pmat). See set_operator_matrix(). + */ + SparseMatrix * _operator_matrix; }; } // namespace libMesh diff --git a/src/solvers/petsc_nonlinear_solver.C b/src/solvers/petsc_nonlinear_solver.C index 29c1a6211a0..b965eca70ef 100644 --- a/src/solvers/petsc_nonlinear_solver.C +++ b/src/solvers/petsc_nonlinear_solver.C @@ -900,6 +900,18 @@ PetscNonlinearSolver::build_mat_null_space(NonlinearImplicitSystem::ComputeVe template std::pair PetscNonlinearSolver::solve (SparseMatrix & pre_in, // System Preconditioning Matrix + NumericVector & x_in, // Solution vector + NumericVector & r_in, // Residual vector + const double tol, // Stopping tolerance + const unsigned int m_its) +{ + return this->solve(pre_in, pre_in, x_in, r_in, tol, m_its); +} + +template +std::pair +PetscNonlinearSolver::solve (SparseMatrix & jac_in, // Jacobian operator matrix (Amat) + SparseMatrix & pre_in, // Preconditioning matrix (Pmat) NumericVector & x_in, // Solution vector NumericVector & r_in, // Residual vector const double, // Stopping tolerance @@ -911,6 +923,7 @@ PetscNonlinearSolver::solve (SparseMatrix & pre_in, // System Preconditi this->init (); // Make sure the data passed in are really of Petsc types + PetscMatrixBase * jac = cast_ptr *>(&jac_in); PetscMatrixBase * pre = cast_ptr *>(&pre_in); PetscVector * x = cast_ptr *>(&x_in); PetscVector * r = cast_ptr *>(&r_in); @@ -952,7 +965,7 @@ PetscNonlinearSolver::solve (SparseMatrix & pre_in, // System Preconditi // Only set the jacobian function if we've been provided with something to call. // This allows a user to set their own jacobian function if they want to if (this->jacobian || this->jacobian_object || this->residual_and_jacobian_object) - LibmeshPetscCall(SNESSetJacobian (_snes, pre->mat(), pre->mat(), libmesh_petsc_snes_jacobian, this)); + LibmeshPetscCall(SNESSetJacobian (_snes, jac->mat(), pre->mat(), libmesh_petsc_snes_jacobian, this)); // Have the Krylov subspace method use our good initial guess rather than 0 KSP ksp; diff --git a/src/systems/nonlinear_implicit_system.C b/src/systems/nonlinear_implicit_system.C index f4f764e307c..f0fec223cf5 100644 --- a/src/systems/nonlinear_implicit_system.C +++ b/src/systems/nonlinear_implicit_system.C @@ -38,7 +38,8 @@ NonlinearImplicitSystem::NonlinearImplicitSystem (EquationSystems & es, nonlinear_solver (NonlinearSolver::build(*this)), diff_solver (), _n_nonlinear_iterations (0), - _final_nonlinear_residual (1.e20) + _final_nonlinear_residual (1.e20), + _operator_matrix (nullptr) { // Set default parameters // These were chosen to match the Petsc defaults @@ -223,10 +224,20 @@ void NonlinearImplicitSystem::solve () // Solve the nonlinear system. // Store the number of nonlinear iterations required to // solve and the final residual. - std::tie(_n_nonlinear_iterations, _final_nonlinear_residual) = - nonlinear_solver->solve (*matrix, *solution, *rhs, - nonlinear_solver->relative_residual_tolerance, - nonlinear_solver->max_linear_iterations); + // + // If a distinct Jacobian operator matrix has been registered (see + // set_operator_matrix()), use it as Amat while *matrix remains the preconditioning matrix + // (Pmat); otherwise use the ordinary single-matrix solve. + if (_operator_matrix) + std::tie(_n_nonlinear_iterations, _final_nonlinear_residual) = + nonlinear_solver->solve (*_operator_matrix, *matrix, *solution, *rhs, + nonlinear_solver->relative_residual_tolerance, + nonlinear_solver->max_linear_iterations); + else + std::tie(_n_nonlinear_iterations, _final_nonlinear_residual) = + nonlinear_solver->solve (*matrix, *solution, *rhs, + nonlinear_solver->relative_residual_tolerance, + nonlinear_solver->max_linear_iterations); } // Update the system after the solve From 4168c62f1aa72901c291c99006b3bb0d21c91104 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Wed, 2 Sep 2026 09:20:07 -0700 Subject: [PATCH 04/27] Add unit tests Co-Authored-By: Claude --- include/solvers/nonlinear_solver.h | 16 +- tests/Makefile.am | 3 + .../numerics/petsc_matrix_shell_matrix_test.C | 116 +++++++++++ tests/numerics/petsc_mffd_matrix_test.C | 83 ++++++++ .../systems/nonlinear_implicit_system_test.C | 191 ++++++++++++++++++ 5 files changed, 400 insertions(+), 9 deletions(-) create mode 100644 tests/numerics/petsc_matrix_shell_matrix_test.C create mode 100644 tests/numerics/petsc_mffd_matrix_test.C create mode 100644 tests/systems/nonlinear_implicit_system_test.C diff --git a/include/solvers/nonlinear_solver.h b/include/solvers/nonlinear_solver.h index 9a746c2e75f..f5a48f18642 100644 --- a/include/solvers/nonlinear_solver.h +++ b/include/solvers/nonlinear_solver.h @@ -105,18 +105,16 @@ class NonlinearSolver : public ReferenceCountedObject>, /** * Solves the nonlinear system using \p jac_in as the actual Jacobian operator and \p pre_in as * the preconditioning matrix -- which may be the same object (the common case) or genuinely - * distinct (e.g. a matrix-free operator paired with an assembled preconditioning matrix). The - * default implementation ignores \p jac_in and simply forwards to the single-matrix solve(), - * for solver backends that do not distinguish between the two. + * distinct (e.g. a matrix-free operator paired with an assembled preconditioning matrix). */ virtual std::pair solve (SparseMatrix & /* jac_in */, - SparseMatrix & pre_in, - NumericVector & x_in, - NumericVector & r_in, - const double tol, - const unsigned int m_its) + SparseMatrix & /* pre_in */, + NumericVector & /* x_in */, + NumericVector & /* r_in */, + const double /* tol */, + const unsigned int /* m_its */) { - return this->solve(pre_in, x_in, r_in, tol, m_its); + libmesh_not_implemented(); } /** diff --git a/tests/Makefile.am b/tests/Makefile.am index f116a562c80..6af2d501f82 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -114,6 +114,8 @@ unit_tests_sources = \ numerics/sparse_matrix_test.h \ numerics/dense_matrix_test.C \ numerics/petsc_matrix_test.C \ + numerics/petsc_matrix_shell_matrix_test.C \ + numerics/petsc_mffd_matrix_test.C \ numerics/diagonal_matrix_test.C \ numerics/lumped_mass_matrix_test.C \ numerics/eigen_sparse_matrix_test.C \ @@ -143,6 +145,7 @@ unit_tests_sources = \ systems/periodic_bc_test.C \ systems/disjoint_neighbor_test.C \ systems/systems_test.C \ + systems/nonlinear_implicit_system_test.C \ utils/parameters_test.C \ utils/point_locator_test.C \ utils/rb_parameters_test.C \ diff --git a/tests/numerics/petsc_matrix_shell_matrix_test.C b/tests/numerics/petsc_matrix_shell_matrix_test.C new file mode 100644 index 00000000000..159e51d0223 --- /dev/null +++ b/tests/numerics/petsc_matrix_shell_matrix_test.C @@ -0,0 +1,116 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#include + +#ifdef LIBMESH_HAVE_PETSC + +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +using namespace libMesh; + +namespace +{ +// A trivial MATOP_MULT: y = 2*x. Just enough to prove a PetscMatrixShellMatrix +// is a genuinely usable MatMult operand, e.g. as a matrix-free SNES Jacobian. +PetscErrorCode +petsc_matrix_shell_matrix_test_mult(Mat, Vec x, Vec y) +{ + PetscFunctionBeginUser; + PetscCall(VecCopy(x, y)); + PetscCall(VecScale(y, 2.)); + PetscFunctionReturn(PETSC_SUCCESS); +} +} + +class PetscMatrixShellMatrixTest : public CppUnit::TestCase +{ +public: + LIBMESH_CPPUNIT_TEST_SUITE(PetscMatrixShellMatrixTest); + + CPPUNIT_TEST(testInitSizes); + CPPUNIT_TEST(testGetContext); + CPPUNIT_TEST(testMult); + + CPPUNIT_TEST_SUITE_END(); + +public: + + void setUp() {} + void tearDown() {} + + void testInitSizes() + { + LOG_UNIT_TEST; + + PetscMatrixShellMatrix mat(*TestCommWorld); + const numeric_index_type m = TestCommWorld->size(); + mat.init(m, m, /*m_l=*/1, /*n_l=*/1); + + CPPUNIT_ASSERT_EQUAL(mat.m(), m); + CPPUNIT_ASSERT_EQUAL(mat.n(), m); + CPPUNIT_ASSERT_EQUAL(mat.local_m(), numeric_index_type(1)); + CPPUNIT_ASSERT_EQUAL(mat.local_n(), numeric_index_type(1)); + + MatType type; + LibmeshPetscCall2((*TestCommWorld), MatGetType(mat.mat(), &type)); + CPPUNIT_ASSERT(std::string(type) == MATSHELL); + } + + void testGetContext() + { + LOG_UNIT_TEST; + + PetscMatrixShellMatrix mat(*TestCommWorld); + const numeric_index_type m = TestCommWorld->size(); + mat.init(m, m, 1, 1); + + // init() composes libmesh's own context onto the shell Mat, letting + // get_context() recover the wrapping object later given only the raw Mat. + CPPUNIT_ASSERT(PetscMatrixBase::get_context(mat.mat(), *TestCommWorld) == &mat); + } + + void testMult() + { + LOG_UNIT_TEST; + + PetscMatrixShellMatrix mat(*TestCommWorld); + const numeric_index_type m = TestCommWorld->size(); + mat.init(m, m, 1, 1); + + LibmeshPetscCall2((*TestCommWorld), + MatShellSetOperation(mat.mat(), MATOP_MULT, + (void (*)(void))petsc_matrix_shell_matrix_test_mult)); + + PetscVector x(*TestCommWorld, m, 1); + PetscVector y(*TestCommWorld, m, 1); + x.set(TestCommWorld->rank(), 3.); + x.close(); + + LibmeshPetscCall2((*TestCommWorld), MatMult(mat.mat(), x.vec(), y.vec())); + + LIBMESH_ASSERT_NUMBERS_EQUAL(Number(6.), y(TestCommWorld->rank()), TOLERANCE); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(PetscMatrixShellMatrixTest); + +#endif // LIBMESH_HAVE_PETSC diff --git a/tests/numerics/petsc_mffd_matrix_test.C b/tests/numerics/petsc_mffd_matrix_test.C new file mode 100644 index 00000000000..7c02a2739a8 --- /dev/null +++ b/tests/numerics/petsc_mffd_matrix_test.C @@ -0,0 +1,83 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#include + +#ifdef LIBMESH_HAVE_PETSC + +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +using namespace libMesh; + +class PetscMFFDMatrixTest : public CppUnit::TestCase +{ +public: + LIBMESH_CPPUNIT_TEST_SUITE(PetscMFFDMatrixTest); + + CPPUNIT_TEST(testAssignWithContext); + CPPUNIT_TEST(testAssignWithoutContext); + + CPPUNIT_TEST_SUITE_END(); + +public: + + void setUp() {} + void tearDown() {} + + void testAssignWithContext() + { + LOG_UNIT_TEST; + + // A real, owned Mat for the wrapper to adopt. init() attaches its own + // context (pointing at owner) as a side effect. + PetscMatrixShellMatrix owner(*TestCommWorld); + owner.init(TestCommWorld->size(), TestCommWorld->size(), 1, 1); + + PetscMFFDMatrix mffd(*TestCommWorld); + mffd.assign(owner.mat(), /*set_context=*/true); + + CPPUNIT_ASSERT(mffd.mat() == owner.mat()); + CPPUNIT_ASSERT(PetscMatrixBase::get_context(owner.mat(), *TestCommWorld) == &mffd); + } + + void testAssignWithoutContext() + { + LOG_UNIT_TEST; + + PetscMatrixShellMatrix owner(*TestCommWorld); + owner.init(TestCommWorld->size(), TestCommWorld->size(), 1, 1); + + { + PetscMFFDMatrix mffd(*TestCommWorld); + mffd.assign(owner.mat(), /*set_context=*/false); + CPPUNIT_ASSERT(mffd.mat() == owner.mat()); + } + + // mffd is now destroyed. Since assign() above didn't attach a context, + // owner's own context (set by its own init()) must still be intact -- + // this is the dangling-context scenario set_context=false exists to avoid. + CPPUNIT_ASSERT(PetscMatrixBase::get_context(owner.mat(), *TestCommWorld) == &owner); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(PetscMFFDMatrixTest); + +#endif // LIBMESH_HAVE_PETSC diff --git a/tests/systems/nonlinear_implicit_system_test.C b/tests/systems/nonlinear_implicit_system_test.C new file mode 100644 index 00000000000..4b3478fc72a --- /dev/null +++ b/tests/systems/nonlinear_implicit_system_test.C @@ -0,0 +1,191 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#include +#include +#include +#include +#include +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +using namespace libMesh; + +namespace +{ +// Only overrides the single-matrix solve(), like a backend that doesn't +// distinguish the Jacobian operator matrix from the preconditioning matrix, +// relying on NonlinearSolver's own default two-matrix forwarding. +class SingleMatrixNonlinearSolver : public NonlinearSolver +{ +public: + explicit SingleMatrixNonlinearSolver(NonlinearImplicitSystem & s) : NonlinearSolver(s) {} + + // Un-hide the base class's two-matrix solve() overload, which we don't + // override here since it's exactly the default forwarding behavior we're + // testing. + using NonlinearSolver::solve; + + virtual void init(const char * = nullptr) override {} + + virtual std::pair + solve(SparseMatrix & jac_in, + NumericVector &, + NumericVector &, + const double, + const unsigned int) override + { + solved_with = &jac_in; + ++single_matrix_calls; + return {0, 0.}; + } + + virtual int get_total_linear_iterations() override { return 0; } + virtual unsigned get_current_nonlinear_iteration_number() const override { return 0; } + + SparseMatrix * solved_with = nullptr; + unsigned int single_matrix_calls = 0; +}; + +// Also records which matrix(es) NonlinearImplicitSystem::solve() actually +// passes down to the NonlinearSolver, without performing any real solve. On +// top of the inherited single-matrix override, this overrides the +// two-matrix solve() overload too, like a backend that distinguishes the +// Jacobian operator matrix from the preconditioning matrix. +class TwoMatrixNonlinearSolver : public SingleMatrixNonlinearSolver +{ +public: + explicit TwoMatrixNonlinearSolver(NonlinearImplicitSystem & s) : SingleMatrixNonlinearSolver(s) {} + + // Un-hide the inherited single-matrix override alongside our own + // two-matrix override below. + using SingleMatrixNonlinearSolver::solve; + + virtual std::pair + solve(SparseMatrix & jac_in, + SparseMatrix & pre_in, + NumericVector &, + NumericVector &, + const double, + const unsigned int) override + { + solved_with = &jac_in; + solved_with_pre = &pre_in; + ++two_matrix_calls; + return {0, 0.}; + } + + SparseMatrix * solved_with_pre = nullptr; + unsigned int two_matrix_calls = 0; +}; +} + +class NonlinearImplicitSystemOperatorMatrixTest : public CppUnit::TestCase +{ +public: + LIBMESH_CPPUNIT_TEST_SUITE(NonlinearImplicitSystemOperatorMatrixTest); + + CPPUNIT_TEST(testDefaultUsesSingleMatrixSolve); + CPPUNIT_TEST(testOperatorMatrixUsesTwoMatrixSolve); + CPPUNIT_TEST(testTwoMatrixSolveWithoutOverrideThrows); + + CPPUNIT_TEST_SUITE_END(); + +public: + + std::unique_ptr mesh; + std::unique_ptr es; + NonlinearImplicitSystem * sys = nullptr; + + void setUp() + { + mesh = std::make_unique(*TestCommWorld); + MeshTools::Generation::build_point(*mesh); + es = std::make_unique(*mesh); + sys = &es->add_system("test"); + es->init(); + } + + void tearDown() + { + sys = nullptr; + es.reset(); + mesh.reset(); + } + + // Without an operator matrix registered, solve() should use the ordinary + // single-matrix path with the system's own preconditioning matrix. + void testDefaultUsesSingleMatrixSolve() + { + LOG_UNIT_TEST; + + auto solver = std::make_unique(*sys); + auto * solver_ptr = solver.get(); + sys->nonlinear_solver = std::move(solver); + + sys->solve(); + + CPPUNIT_ASSERT(solver_ptr->solved_with == sys->matrix); + CPPUNIT_ASSERT_EQUAL(solver_ptr->single_matrix_calls, 1u); + CPPUNIT_ASSERT_EQUAL(solver_ptr->two_matrix_calls, 0u); + } + + // set_operator_matrix() should make solve() use the two-matrix path, with + // the registered matrix as the Jacobian operator and the system's own + // matrix as the preconditioning matrix. + void testOperatorMatrixUsesTwoMatrixSolve() + { + LOG_UNIT_TEST; + + auto amat = SparseMatrix::build(*TestCommWorld); + sys->set_operator_matrix(amat.get()); + + auto solver = std::make_unique(*sys); + auto * solver_ptr = solver.get(); + sys->nonlinear_solver = std::move(solver); + + sys->solve(); + + CPPUNIT_ASSERT(solver_ptr->solved_with == amat.get()); + CPPUNIT_ASSERT(solver_ptr->solved_with_pre == sys->matrix); + CPPUNIT_ASSERT_EQUAL(solver_ptr->two_matrix_calls, 1u); + CPPUNIT_ASSERT_EQUAL(solver_ptr->single_matrix_calls, 0u); + } + + // NonlinearSolver's own two-matrix solve() overload has no fallback + // implementation -- a backend (like this test's mock) that doesn't + // override it can't honor a distinct Jacobian operator matrix, so it must + // refuse rather than silently solving with the preconditioning matrix + // instead of the one the caller explicitly asked to use. + void testTwoMatrixSolveWithoutOverrideThrows() + { + LOG_UNIT_TEST; + + auto amat = SparseMatrix::build(*TestCommWorld); + sys->set_operator_matrix(amat.get()); + + auto solver = std::make_unique(*sys); + sys->nonlinear_solver = std::move(solver); + + CPPUNIT_ASSERT_THROW(sys->solve(), libMesh::NotImplemented); + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(NonlinearImplicitSystemOperatorMatrixTest); From 7e7f3c8131e724e4c97a7c51f9bb342ab8678a45 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Wed, 2 Sep 2026 09:30:36 -0700 Subject: [PATCH 05/27] Run bootstrap --- tests/Makefile.in | 333 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 333 insertions(+) diff --git a/tests/Makefile.in b/tests/Makefile.in index da49639a232..4f27821a45c 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -259,6 +259,8 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ numerics/type_vector_test.h numerics/vector_value_test.C \ numerics/type_tensor_test.C numerics/sparse_matrix_test.h \ numerics/dense_matrix_test.C numerics/petsc_matrix_test.C \ + numerics/petsc_matrix_shell_matrix_test.C \ + numerics/petsc_mffd_matrix_test.C \ numerics/diagonal_matrix_test.C \ numerics/lumped_mass_matrix_test.C \ numerics/eigen_sparse_matrix_test.C \ @@ -280,6 +282,7 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ systems/disjoint_neighbor_test.C systems/systems_test.C \ + systems/nonlinear_implicit_system_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -374,6 +377,8 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ numerics/unit_tests_dbg-type_tensor_test.$(OBJEXT) \ numerics/unit_tests_dbg-dense_matrix_test.$(OBJEXT) \ numerics/unit_tests_dbg-petsc_matrix_test.$(OBJEXT) \ + numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.$(OBJEXT) \ + numerics/unit_tests_dbg-petsc_mffd_matrix_test.$(OBJEXT) \ numerics/unit_tests_dbg-diagonal_matrix_test.$(OBJEXT) \ numerics/unit_tests_dbg-lumped_mass_matrix_test.$(OBJEXT) \ numerics/unit_tests_dbg-eigen_sparse_matrix_test.$(OBJEXT) \ @@ -401,6 +406,7 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ systems/unit_tests_dbg-periodic_bc_test.$(OBJEXT) \ systems/unit_tests_dbg-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_dbg-systems_test.$(OBJEXT) \ + systems/unit_tests_dbg-nonlinear_implicit_system_test.$(OBJEXT) \ utils/unit_tests_dbg-parameters_test.$(OBJEXT) \ utils/unit_tests_dbg-point_locator_test.$(OBJEXT) \ utils/unit_tests_dbg-rb_parameters_test.$(OBJEXT) \ @@ -470,6 +476,8 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ numerics/type_vector_test.h numerics/vector_value_test.C \ numerics/type_tensor_test.C numerics/sparse_matrix_test.h \ numerics/dense_matrix_test.C numerics/petsc_matrix_test.C \ + numerics/petsc_matrix_shell_matrix_test.C \ + numerics/petsc_mffd_matrix_test.C \ numerics/diagonal_matrix_test.C \ numerics/lumped_mass_matrix_test.C \ numerics/eigen_sparse_matrix_test.C \ @@ -491,6 +499,7 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ systems/disjoint_neighbor_test.C systems/systems_test.C \ + systems/nonlinear_implicit_system_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -584,6 +593,8 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ numerics/unit_tests_devel-type_tensor_test.$(OBJEXT) \ numerics/unit_tests_devel-dense_matrix_test.$(OBJEXT) \ numerics/unit_tests_devel-petsc_matrix_test.$(OBJEXT) \ + numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.$(OBJEXT) \ + numerics/unit_tests_devel-petsc_mffd_matrix_test.$(OBJEXT) \ numerics/unit_tests_devel-diagonal_matrix_test.$(OBJEXT) \ numerics/unit_tests_devel-lumped_mass_matrix_test.$(OBJEXT) \ numerics/unit_tests_devel-eigen_sparse_matrix_test.$(OBJEXT) \ @@ -611,6 +622,7 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ systems/unit_tests_devel-periodic_bc_test.$(OBJEXT) \ systems/unit_tests_devel-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_devel-systems_test.$(OBJEXT) \ + systems/unit_tests_devel-nonlinear_implicit_system_test.$(OBJEXT) \ utils/unit_tests_devel-parameters_test.$(OBJEXT) \ utils/unit_tests_devel-point_locator_test.$(OBJEXT) \ utils/unit_tests_devel-rb_parameters_test.$(OBJEXT) \ @@ -698,6 +710,8 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ numerics/type_vector_test.h numerics/vector_value_test.C \ numerics/type_tensor_test.C numerics/sparse_matrix_test.h \ numerics/dense_matrix_test.C numerics/petsc_matrix_test.C \ + numerics/petsc_matrix_shell_matrix_test.C \ + numerics/petsc_mffd_matrix_test.C \ numerics/diagonal_matrix_test.C \ numerics/lumped_mass_matrix_test.C \ numerics/eigen_sparse_matrix_test.C \ @@ -719,6 +733,7 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ systems/disjoint_neighbor_test.C systems/systems_test.C \ + systems/nonlinear_implicit_system_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -812,6 +827,8 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ numerics/unit_tests_oprof-type_tensor_test.$(OBJEXT) \ numerics/unit_tests_oprof-dense_matrix_test.$(OBJEXT) \ numerics/unit_tests_oprof-petsc_matrix_test.$(OBJEXT) \ + numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.$(OBJEXT) \ + numerics/unit_tests_oprof-petsc_mffd_matrix_test.$(OBJEXT) \ numerics/unit_tests_oprof-diagonal_matrix_test.$(OBJEXT) \ numerics/unit_tests_oprof-lumped_mass_matrix_test.$(OBJEXT) \ numerics/unit_tests_oprof-eigen_sparse_matrix_test.$(OBJEXT) \ @@ -839,6 +856,7 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ systems/unit_tests_oprof-periodic_bc_test.$(OBJEXT) \ systems/unit_tests_oprof-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_oprof-systems_test.$(OBJEXT) \ + systems/unit_tests_oprof-nonlinear_implicit_system_test.$(OBJEXT) \ utils/unit_tests_oprof-parameters_test.$(OBJEXT) \ utils/unit_tests_oprof-point_locator_test.$(OBJEXT) \ utils/unit_tests_oprof-rb_parameters_test.$(OBJEXT) \ @@ -904,6 +922,8 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ numerics/type_vector_test.h numerics/vector_value_test.C \ numerics/type_tensor_test.C numerics/sparse_matrix_test.h \ numerics/dense_matrix_test.C numerics/petsc_matrix_test.C \ + numerics/petsc_matrix_shell_matrix_test.C \ + numerics/petsc_mffd_matrix_test.C \ numerics/diagonal_matrix_test.C \ numerics/lumped_mass_matrix_test.C \ numerics/eigen_sparse_matrix_test.C \ @@ -925,6 +945,7 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ systems/disjoint_neighbor_test.C systems/systems_test.C \ + systems/nonlinear_implicit_system_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -1018,6 +1039,8 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ numerics/unit_tests_opt-type_tensor_test.$(OBJEXT) \ numerics/unit_tests_opt-dense_matrix_test.$(OBJEXT) \ numerics/unit_tests_opt-petsc_matrix_test.$(OBJEXT) \ + numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.$(OBJEXT) \ + numerics/unit_tests_opt-petsc_mffd_matrix_test.$(OBJEXT) \ numerics/unit_tests_opt-diagonal_matrix_test.$(OBJEXT) \ numerics/unit_tests_opt-lumped_mass_matrix_test.$(OBJEXT) \ numerics/unit_tests_opt-eigen_sparse_matrix_test.$(OBJEXT) \ @@ -1045,6 +1068,7 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ systems/unit_tests_opt-periodic_bc_test.$(OBJEXT) \ systems/unit_tests_opt-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_opt-systems_test.$(OBJEXT) \ + systems/unit_tests_opt-nonlinear_implicit_system_test.$(OBJEXT) \ utils/unit_tests_opt-parameters_test.$(OBJEXT) \ utils/unit_tests_opt-point_locator_test.$(OBJEXT) \ utils/unit_tests_opt-rb_parameters_test.$(OBJEXT) \ @@ -1110,6 +1134,8 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ numerics/type_vector_test.h numerics/vector_value_test.C \ numerics/type_tensor_test.C numerics/sparse_matrix_test.h \ numerics/dense_matrix_test.C numerics/petsc_matrix_test.C \ + numerics/petsc_matrix_shell_matrix_test.C \ + numerics/petsc_mffd_matrix_test.C \ numerics/diagonal_matrix_test.C \ numerics/lumped_mass_matrix_test.C \ numerics/eigen_sparse_matrix_test.C \ @@ -1131,6 +1157,7 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ systems/disjoint_neighbor_test.C systems/systems_test.C \ + systems/nonlinear_implicit_system_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C fparser/autodiff.C @@ -1224,6 +1251,8 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ numerics/unit_tests_prof-type_tensor_test.$(OBJEXT) \ numerics/unit_tests_prof-dense_matrix_test.$(OBJEXT) \ numerics/unit_tests_prof-petsc_matrix_test.$(OBJEXT) \ + numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.$(OBJEXT) \ + numerics/unit_tests_prof-petsc_mffd_matrix_test.$(OBJEXT) \ numerics/unit_tests_prof-diagonal_matrix_test.$(OBJEXT) \ numerics/unit_tests_prof-lumped_mass_matrix_test.$(OBJEXT) \ numerics/unit_tests_prof-eigen_sparse_matrix_test.$(OBJEXT) \ @@ -1251,6 +1280,7 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ systems/unit_tests_prof-periodic_bc_test.$(OBJEXT) \ systems/unit_tests_prof-disjoint_neighbor_test.$(OBJEXT) \ systems/unit_tests_prof-systems_test.$(OBJEXT) \ + systems/unit_tests_prof-nonlinear_implicit_system_test.$(OBJEXT) \ utils/unit_tests_prof-parameters_test.$(OBJEXT) \ utils/unit_tests_prof-point_locator_test.$(OBJEXT) \ utils/unit_tests_prof-rb_parameters_test.$(OBJEXT) \ @@ -1671,7 +1701,9 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ numerics/$(DEPDIR)/unit_tests_dbg-lumped_mass_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_dbg-parsed_fem_function_test.Po \ numerics/$(DEPDIR)/unit_tests_dbg-parsed_function_test.Po \ + numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_test.Po \ + numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_dbg-petsc_vector_test.Po \ numerics/$(DEPDIR)/unit_tests_dbg-tensor_traits_test.Po \ numerics/$(DEPDIR)/unit_tests_dbg-trilinos_epetra_vector_test.Po \ @@ -1689,7 +1721,9 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ numerics/$(DEPDIR)/unit_tests_devel-lumped_mass_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_devel-parsed_fem_function_test.Po \ numerics/$(DEPDIR)/unit_tests_devel-parsed_function_test.Po \ + numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_test.Po \ + numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_devel-petsc_vector_test.Po \ numerics/$(DEPDIR)/unit_tests_devel-tensor_traits_test.Po \ numerics/$(DEPDIR)/unit_tests_devel-trilinos_epetra_vector_test.Po \ @@ -1707,7 +1741,9 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ numerics/$(DEPDIR)/unit_tests_oprof-lumped_mass_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_oprof-parsed_fem_function_test.Po \ numerics/$(DEPDIR)/unit_tests_oprof-parsed_function_test.Po \ + numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_test.Po \ + numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_oprof-petsc_vector_test.Po \ numerics/$(DEPDIR)/unit_tests_oprof-tensor_traits_test.Po \ numerics/$(DEPDIR)/unit_tests_oprof-trilinos_epetra_vector_test.Po \ @@ -1725,7 +1761,9 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ numerics/$(DEPDIR)/unit_tests_opt-lumped_mass_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_opt-parsed_fem_function_test.Po \ numerics/$(DEPDIR)/unit_tests_opt-parsed_function_test.Po \ + numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_test.Po \ + numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_opt-petsc_vector_test.Po \ numerics/$(DEPDIR)/unit_tests_opt-tensor_traits_test.Po \ numerics/$(DEPDIR)/unit_tests_opt-trilinos_epetra_vector_test.Po \ @@ -1743,7 +1781,9 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ numerics/$(DEPDIR)/unit_tests_prof-lumped_mass_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_prof-parsed_fem_function_test.Po \ numerics/$(DEPDIR)/unit_tests_prof-parsed_function_test.Po \ + numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_test.Po \ + numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Po \ numerics/$(DEPDIR)/unit_tests_prof-petsc_vector_test.Po \ numerics/$(DEPDIR)/unit_tests_prof-tensor_traits_test.Po \ numerics/$(DEPDIR)/unit_tests_prof-trilinos_epetra_vector_test.Po \ @@ -1842,26 +1882,31 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po \ + systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po \ systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po \ systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po \ + systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Po \ systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_devel-systems_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po \ + systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po \ systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po \ systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po \ + systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Po \ systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_opt-systems_test.Po \ systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po \ systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po \ systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po \ + systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Po \ systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po \ systems/$(DEPDIR)/unit_tests_prof-systems_test.Po \ utils/$(DEPDIR)/unit_tests_dbg-parameters_test.Po \ @@ -2445,6 +2490,8 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ numerics/type_vector_test.h numerics/vector_value_test.C \ numerics/type_tensor_test.C numerics/sparse_matrix_test.h \ numerics/dense_matrix_test.C numerics/petsc_matrix_test.C \ + numerics/petsc_matrix_shell_matrix_test.C \ + numerics/petsc_mffd_matrix_test.C \ numerics/diagonal_matrix_test.C \ numerics/lumped_mass_matrix_test.C \ numerics/eigen_sparse_matrix_test.C \ @@ -2466,6 +2513,7 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ systems/constraint_operator_test.C \ systems/equation_systems_test.C systems/periodic_bc_test.C \ systems/disjoint_neighbor_test.C systems/systems_test.C \ + systems/nonlinear_implicit_system_test.C \ utils/parameters_test.C utils/point_locator_test.C \ utils/rb_parameters_test.C utils/transparent_comparator.C \ utils/vectormap_test.C utils/xdr_test.C $(am__append_1) @@ -2924,6 +2972,10 @@ numerics/unit_tests_dbg-dense_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_dbg-petsc_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_dbg-petsc_mffd_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_dbg-diagonal_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_dbg-lumped_mass_matrix_test.$(OBJEXT): \ @@ -3016,6 +3068,8 @@ systems/unit_tests_dbg-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_dbg-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_dbg-nonlinear_implicit_system_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/$(am__dirstamp): @$(MKDIR_P) utils @: >>utils/$(am__dirstamp) @@ -3222,6 +3276,10 @@ numerics/unit_tests_devel-dense_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_devel-petsc_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_devel-petsc_mffd_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_devel-diagonal_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_devel-lumped_mass_matrix_test.$(OBJEXT): \ @@ -3284,6 +3342,8 @@ systems/unit_tests_devel-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_devel-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_devel-nonlinear_implicit_system_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_devel-parameters_test.$(OBJEXT): \ utils/$(am__dirstamp) utils/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_devel-point_locator_test.$(OBJEXT): \ @@ -3518,6 +3578,10 @@ numerics/unit_tests_oprof-dense_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_oprof-petsc_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_oprof-petsc_mffd_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_oprof-diagonal_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_oprof-lumped_mass_matrix_test.$(OBJEXT): \ @@ -3580,6 +3644,8 @@ systems/unit_tests_oprof-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_oprof-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_oprof-nonlinear_implicit_system_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_oprof-parameters_test.$(OBJEXT): \ utils/$(am__dirstamp) utils/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_oprof-point_locator_test.$(OBJEXT): \ @@ -3774,6 +3840,10 @@ numerics/unit_tests_opt-dense_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_opt-petsc_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_opt-petsc_mffd_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_opt-diagonal_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_opt-lumped_mass_matrix_test.$(OBJEXT): \ @@ -3836,6 +3906,8 @@ systems/unit_tests_opt-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_opt-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_opt-nonlinear_implicit_system_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_opt-parameters_test.$(OBJEXT): utils/$(am__dirstamp) \ utils/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_opt-point_locator_test.$(OBJEXT): \ @@ -4030,6 +4102,10 @@ numerics/unit_tests_prof-dense_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_prof-petsc_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) +numerics/unit_tests_prof-petsc_mffd_matrix_test.$(OBJEXT): \ + numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_prof-diagonal_matrix_test.$(OBJEXT): \ numerics/$(am__dirstamp) numerics/$(DEPDIR)/$(am__dirstamp) numerics/unit_tests_prof-lumped_mass_matrix_test.$(OBJEXT): \ @@ -4092,6 +4168,8 @@ systems/unit_tests_prof-disjoint_neighbor_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) systems/unit_tests_prof-systems_test.$(OBJEXT): \ systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) +systems/unit_tests_prof-nonlinear_implicit_system_test.$(OBJEXT): \ + systems/$(am__dirstamp) systems/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_prof-parameters_test.$(OBJEXT): \ utils/$(am__dirstamp) utils/$(DEPDIR)/$(am__dirstamp) utils/unit_tests_prof-point_locator_test.$(OBJEXT): \ @@ -4521,7 +4599,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-lumped_mass_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-parsed_fem_function_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-parsed_function_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-petsc_vector_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-tensor_traits_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_dbg-trilinos_epetra_vector_test.Po@am__quote@ # am--include-marker @@ -4539,7 +4619,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-lumped_mass_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-parsed_fem_function_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-parsed_function_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-petsc_vector_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-tensor_traits_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_devel-trilinos_epetra_vector_test.Po@am__quote@ # am--include-marker @@ -4557,7 +4639,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-lumped_mass_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-parsed_fem_function_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-parsed_function_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-petsc_vector_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-tensor_traits_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_oprof-trilinos_epetra_vector_test.Po@am__quote@ # am--include-marker @@ -4575,7 +4659,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-lumped_mass_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-parsed_fem_function_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-parsed_function_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-petsc_vector_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-tensor_traits_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_opt-trilinos_epetra_vector_test.Po@am__quote@ # am--include-marker @@ -4593,7 +4679,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-lumped_mass_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-parsed_fem_function_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-parsed_function_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-petsc_vector_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-tensor_traits_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@numerics/$(DEPDIR)/unit_tests_prof-trilinos_epetra_vector_test.Po@am__quote@ # am--include-marker @@ -4692,26 +4780,31 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_devel-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_opt-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@systems/$(DEPDIR)/unit_tests_prof-systems_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@utils/$(DEPDIR)/unit_tests_dbg-parameters_test.Po@am__quote@ # am--include-marker @@ -6021,6 +6114,34 @@ numerics/unit_tests_dbg-petsc_matrix_test.obj: numerics/petsc_matrix_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_dbg-petsc_matrix_test.obj `if test -f 'numerics/petsc_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_test.C'; fi` +numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.o: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C + +numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.obj: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_dbg-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` + +numerics/unit_tests_dbg-petsc_mffd_matrix_test.o: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_dbg-petsc_mffd_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_dbg-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_dbg-petsc_mffd_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_dbg-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C + +numerics/unit_tests_dbg-petsc_mffd_matrix_test.obj: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_dbg-petsc_mffd_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_dbg-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_dbg-petsc_mffd_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_dbg-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` + numerics/unit_tests_dbg-diagonal_matrix_test.o: numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_dbg-diagonal_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_dbg-diagonal_matrix_test.Tpo -c -o numerics/unit_tests_dbg-diagonal_matrix_test.o `test -f 'numerics/diagonal_matrix_test.C' || echo '$(srcdir)/'`numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_dbg-diagonal_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_dbg-diagonal_matrix_test.Po @@ -6399,6 +6520,20 @@ systems/unit_tests_dbg-systems_test.obj: systems/systems_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-systems_test.obj `if test -f 'systems/systems_test.C'; then $(CYGPATH_W) 'systems/systems_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/systems_test.C'; fi` +systems/unit_tests_dbg-nonlinear_implicit_system_test.o: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-nonlinear_implicit_system_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_dbg-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_dbg-nonlinear_implicit_system_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C + +systems/unit_tests_dbg-nonlinear_implicit_system_test.obj: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_dbg-nonlinear_implicit_system_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_dbg-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_dbg-nonlinear_implicit_system_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_dbg-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` + utils/unit_tests_dbg-parameters_test.o: utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT utils/unit_tests_dbg-parameters_test.o -MD -MP -MF utils/$(DEPDIR)/unit_tests_dbg-parameters_test.Tpo -c -o utils/unit_tests_dbg-parameters_test.o `test -f 'utils/parameters_test.C' || echo '$(srcdir)/'`utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) utils/$(DEPDIR)/unit_tests_dbg-parameters_test.Tpo utils/$(DEPDIR)/unit_tests_dbg-parameters_test.Po @@ -7743,6 +7878,34 @@ numerics/unit_tests_devel-petsc_matrix_test.obj: numerics/petsc_matrix_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_devel-petsc_matrix_test.obj `if test -f 'numerics/petsc_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_test.C'; fi` +numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.o: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C + +numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.obj: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_devel-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` + +numerics/unit_tests_devel-petsc_mffd_matrix_test.o: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_devel-petsc_mffd_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_devel-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_devel-petsc_mffd_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_devel-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C + +numerics/unit_tests_devel-petsc_mffd_matrix_test.obj: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_devel-petsc_mffd_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_devel-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_devel-petsc_mffd_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_devel-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` + numerics/unit_tests_devel-diagonal_matrix_test.o: numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_devel-diagonal_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_devel-diagonal_matrix_test.Tpo -c -o numerics/unit_tests_devel-diagonal_matrix_test.o `test -f 'numerics/diagonal_matrix_test.C' || echo '$(srcdir)/'`numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_devel-diagonal_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_devel-diagonal_matrix_test.Po @@ -8121,6 +8284,20 @@ systems/unit_tests_devel-systems_test.obj: systems/systems_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-systems_test.obj `if test -f 'systems/systems_test.C'; then $(CYGPATH_W) 'systems/systems_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/systems_test.C'; fi` +systems/unit_tests_devel-nonlinear_implicit_system_test.o: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-nonlinear_implicit_system_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_devel-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_devel-nonlinear_implicit_system_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C + +systems/unit_tests_devel-nonlinear_implicit_system_test.obj: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_devel-nonlinear_implicit_system_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_devel-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_devel-nonlinear_implicit_system_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_devel-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` + utils/unit_tests_devel-parameters_test.o: utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT utils/unit_tests_devel-parameters_test.o -MD -MP -MF utils/$(DEPDIR)/unit_tests_devel-parameters_test.Tpo -c -o utils/unit_tests_devel-parameters_test.o `test -f 'utils/parameters_test.C' || echo '$(srcdir)/'`utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) utils/$(DEPDIR)/unit_tests_devel-parameters_test.Tpo utils/$(DEPDIR)/unit_tests_devel-parameters_test.Po @@ -9465,6 +9642,34 @@ numerics/unit_tests_oprof-petsc_matrix_test.obj: numerics/petsc_matrix_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_oprof-petsc_matrix_test.obj `if test -f 'numerics/petsc_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_test.C'; fi` +numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.o: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C + +numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.obj: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_oprof-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` + +numerics/unit_tests_oprof-petsc_mffd_matrix_test.o: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_oprof-petsc_mffd_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_oprof-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_oprof-petsc_mffd_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_oprof-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C + +numerics/unit_tests_oprof-petsc_mffd_matrix_test.obj: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_oprof-petsc_mffd_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_oprof-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_oprof-petsc_mffd_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_oprof-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` + numerics/unit_tests_oprof-diagonal_matrix_test.o: numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_oprof-diagonal_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_oprof-diagonal_matrix_test.Tpo -c -o numerics/unit_tests_oprof-diagonal_matrix_test.o `test -f 'numerics/diagonal_matrix_test.C' || echo '$(srcdir)/'`numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_oprof-diagonal_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_oprof-diagonal_matrix_test.Po @@ -9843,6 +10048,20 @@ systems/unit_tests_oprof-systems_test.obj: systems/systems_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-systems_test.obj `if test -f 'systems/systems_test.C'; then $(CYGPATH_W) 'systems/systems_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/systems_test.C'; fi` +systems/unit_tests_oprof-nonlinear_implicit_system_test.o: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-nonlinear_implicit_system_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_oprof-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_oprof-nonlinear_implicit_system_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C + +systems/unit_tests_oprof-nonlinear_implicit_system_test.obj: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_oprof-nonlinear_implicit_system_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_oprof-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_oprof-nonlinear_implicit_system_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_oprof-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` + utils/unit_tests_oprof-parameters_test.o: utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT utils/unit_tests_oprof-parameters_test.o -MD -MP -MF utils/$(DEPDIR)/unit_tests_oprof-parameters_test.Tpo -c -o utils/unit_tests_oprof-parameters_test.o `test -f 'utils/parameters_test.C' || echo '$(srcdir)/'`utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) utils/$(DEPDIR)/unit_tests_oprof-parameters_test.Tpo utils/$(DEPDIR)/unit_tests_oprof-parameters_test.Po @@ -11187,6 +11406,34 @@ numerics/unit_tests_opt-petsc_matrix_test.obj: numerics/petsc_matrix_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_opt-petsc_matrix_test.obj `if test -f 'numerics/petsc_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_test.C'; fi` +numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.o: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C + +numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.obj: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_opt-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` + +numerics/unit_tests_opt-petsc_mffd_matrix_test.o: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_opt-petsc_mffd_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_opt-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_opt-petsc_mffd_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_opt-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C + +numerics/unit_tests_opt-petsc_mffd_matrix_test.obj: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_opt-petsc_mffd_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_opt-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_opt-petsc_mffd_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_opt-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` + numerics/unit_tests_opt-diagonal_matrix_test.o: numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_opt-diagonal_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_opt-diagonal_matrix_test.Tpo -c -o numerics/unit_tests_opt-diagonal_matrix_test.o `test -f 'numerics/diagonal_matrix_test.C' || echo '$(srcdir)/'`numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_opt-diagonal_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_opt-diagonal_matrix_test.Po @@ -11565,6 +11812,20 @@ systems/unit_tests_opt-systems_test.obj: systems/systems_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-systems_test.obj `if test -f 'systems/systems_test.C'; then $(CYGPATH_W) 'systems/systems_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/systems_test.C'; fi` +systems/unit_tests_opt-nonlinear_implicit_system_test.o: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-nonlinear_implicit_system_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_opt-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_opt-nonlinear_implicit_system_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C + +systems/unit_tests_opt-nonlinear_implicit_system_test.obj: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_opt-nonlinear_implicit_system_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_opt-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_opt-nonlinear_implicit_system_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_opt-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` + utils/unit_tests_opt-parameters_test.o: utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT utils/unit_tests_opt-parameters_test.o -MD -MP -MF utils/$(DEPDIR)/unit_tests_opt-parameters_test.Tpo -c -o utils/unit_tests_opt-parameters_test.o `test -f 'utils/parameters_test.C' || echo '$(srcdir)/'`utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) utils/$(DEPDIR)/unit_tests_opt-parameters_test.Tpo utils/$(DEPDIR)/unit_tests_opt-parameters_test.Po @@ -12909,6 +13170,34 @@ numerics/unit_tests_prof-petsc_matrix_test.obj: numerics/petsc_matrix_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_prof-petsc_matrix_test.obj `if test -f 'numerics/petsc_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_test.C'; fi` +numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.o: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.o `test -f 'numerics/petsc_matrix_shell_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_matrix_shell_matrix_test.C + +numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.obj: numerics/petsc_matrix_shell_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Tpo -c -o numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_matrix_shell_matrix_test.C' object='numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_prof-petsc_matrix_shell_matrix_test.obj `if test -f 'numerics/petsc_matrix_shell_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_matrix_shell_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_matrix_shell_matrix_test.C'; fi` + +numerics/unit_tests_prof-petsc_mffd_matrix_test.o: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_prof-petsc_mffd_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_prof-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_prof-petsc_mffd_matrix_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_prof-petsc_mffd_matrix_test.o `test -f 'numerics/petsc_mffd_matrix_test.C' || echo '$(srcdir)/'`numerics/petsc_mffd_matrix_test.C + +numerics/unit_tests_prof-petsc_mffd_matrix_test.obj: numerics/petsc_mffd_matrix_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_prof-petsc_mffd_matrix_test.obj -MD -MP -MF numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Tpo -c -o numerics/unit_tests_prof-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='numerics/petsc_mffd_matrix_test.C' object='numerics/unit_tests_prof-petsc_mffd_matrix_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o numerics/unit_tests_prof-petsc_mffd_matrix_test.obj `if test -f 'numerics/petsc_mffd_matrix_test.C'; then $(CYGPATH_W) 'numerics/petsc_mffd_matrix_test.C'; else $(CYGPATH_W) '$(srcdir)/numerics/petsc_mffd_matrix_test.C'; fi` + numerics/unit_tests_prof-diagonal_matrix_test.o: numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT numerics/unit_tests_prof-diagonal_matrix_test.o -MD -MP -MF numerics/$(DEPDIR)/unit_tests_prof-diagonal_matrix_test.Tpo -c -o numerics/unit_tests_prof-diagonal_matrix_test.o `test -f 'numerics/diagonal_matrix_test.C' || echo '$(srcdir)/'`numerics/diagonal_matrix_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) numerics/$(DEPDIR)/unit_tests_prof-diagonal_matrix_test.Tpo numerics/$(DEPDIR)/unit_tests_prof-diagonal_matrix_test.Po @@ -13287,6 +13576,20 @@ systems/unit_tests_prof-systems_test.obj: systems/systems_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-systems_test.obj `if test -f 'systems/systems_test.C'; then $(CYGPATH_W) 'systems/systems_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/systems_test.C'; fi` +systems/unit_tests_prof-nonlinear_implicit_system_test.o: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-nonlinear_implicit_system_test.o -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_prof-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_prof-nonlinear_implicit_system_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-nonlinear_implicit_system_test.o `test -f 'systems/nonlinear_implicit_system_test.C' || echo '$(srcdir)/'`systems/nonlinear_implicit_system_test.C + +systems/unit_tests_prof-nonlinear_implicit_system_test.obj: systems/nonlinear_implicit_system_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT systems/unit_tests_prof-nonlinear_implicit_system_test.obj -MD -MP -MF systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Tpo -c -o systems/unit_tests_prof-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Tpo systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='systems/nonlinear_implicit_system_test.C' object='systems/unit_tests_prof-nonlinear_implicit_system_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o systems/unit_tests_prof-nonlinear_implicit_system_test.obj `if test -f 'systems/nonlinear_implicit_system_test.C'; then $(CYGPATH_W) 'systems/nonlinear_implicit_system_test.C'; else $(CYGPATH_W) '$(srcdir)/systems/nonlinear_implicit_system_test.C'; fi` + utils/unit_tests_prof-parameters_test.o: utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT utils/unit_tests_prof-parameters_test.o -MD -MP -MF utils/$(DEPDIR)/unit_tests_prof-parameters_test.Tpo -c -o utils/unit_tests_prof-parameters_test.o `test -f 'utils/parameters_test.C' || echo '$(srcdir)/'`utils/parameters_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) utils/$(DEPDIR)/unit_tests_prof-parameters_test.Tpo utils/$(DEPDIR)/unit_tests_prof-parameters_test.Po @@ -14140,7 +14443,9 @@ distclean: distclean-am -rm -f numerics/$(DEPDIR)/unit_tests_dbg-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-trilinos_epetra_vector_test.Po @@ -14158,7 +14463,9 @@ distclean: distclean-am -rm -f numerics/$(DEPDIR)/unit_tests_devel-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-trilinos_epetra_vector_test.Po @@ -14176,7 +14483,9 @@ distclean: distclean-am -rm -f numerics/$(DEPDIR)/unit_tests_oprof-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-trilinos_epetra_vector_test.Po @@ -14194,7 +14503,9 @@ distclean: distclean-am -rm -f numerics/$(DEPDIR)/unit_tests_opt-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-trilinos_epetra_vector_test.Po @@ -14212,7 +14523,9 @@ distclean: distclean-am -rm -f numerics/$(DEPDIR)/unit_tests_prof-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-trilinos_epetra_vector_test.Po @@ -14311,26 +14624,31 @@ distclean: distclean-am -rm -f systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-systems_test.Po -rm -f utils/$(DEPDIR)/unit_tests_dbg-parameters_test.Po @@ -14802,7 +15120,9 @@ maintainer-clean: maintainer-clean-am -rm -f numerics/$(DEPDIR)/unit_tests_dbg-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_dbg-trilinos_epetra_vector_test.Po @@ -14820,7 +15140,9 @@ maintainer-clean: maintainer-clean-am -rm -f numerics/$(DEPDIR)/unit_tests_devel-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_devel-trilinos_epetra_vector_test.Po @@ -14838,7 +15160,9 @@ maintainer-clean: maintainer-clean-am -rm -f numerics/$(DEPDIR)/unit_tests_oprof-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_oprof-trilinos_epetra_vector_test.Po @@ -14856,7 +15180,9 @@ maintainer-clean: maintainer-clean-am -rm -f numerics/$(DEPDIR)/unit_tests_opt-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_opt-trilinos_epetra_vector_test.Po @@ -14874,7 +15200,9 @@ maintainer-clean: maintainer-clean-am -rm -f numerics/$(DEPDIR)/unit_tests_prof-lumped_mass_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-parsed_fem_function_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-parsed_function_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_shell_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_matrix_test.Po + -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_mffd_matrix_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-petsc_vector_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-tensor_traits_test.Po -rm -f numerics/$(DEPDIR)/unit_tests_prof-trilinos_epetra_vector_test.Po @@ -14973,26 +15301,31 @@ maintainer-clean: maintainer-clean-am -rm -f systems/$(DEPDIR)/unit_tests_dbg-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_dbg-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_dbg-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_devel-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_devel-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_oprof-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_oprof-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_opt-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_opt-systems_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-constraint_operator_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-disjoint_neighbor_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-equation_systems_test.Po + -rm -f systems/$(DEPDIR)/unit_tests_prof-nonlinear_implicit_system_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-periodic_bc_test.Po -rm -f systems/$(DEPDIR)/unit_tests_prof-systems_test.Po -rm -f utils/$(DEPDIR)/unit_tests_dbg-parameters_test.Po From 77ac9eea1ae14d8350c669036e04f8044a96a712 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Wed, 2 Sep 2026 09:57:37 -0700 Subject: [PATCH 06/27] Use libmesh petsc shims Co-Authored-By: Claude --- tests/numerics/petsc_matrix_shell_matrix_test.C | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/numerics/petsc_matrix_shell_matrix_test.C b/tests/numerics/petsc_matrix_shell_matrix_test.C index 159e51d0223..70a435f10f7 100644 --- a/tests/numerics/petsc_matrix_shell_matrix_test.C +++ b/tests/numerics/petsc_matrix_shell_matrix_test.C @@ -35,9 +35,9 @@ PetscErrorCode petsc_matrix_shell_matrix_test_mult(Mat, Vec x, Vec y) { PetscFunctionBeginUser; - PetscCall(VecCopy(x, y)); - PetscCall(VecScale(y, 2.)); - PetscFunctionReturn(PETSC_SUCCESS); + LibmeshPetscCallQ(VecCopy(x, y)); + LibmeshPetscCallQ(VecScale(y, 2.)); + PetscFunctionReturn(LIBMESH_PETSC_SUCCESS); } } From 7200312eed48464b187b424171f8f3b469eefa91 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Wed, 2 Sep 2026 11:12:57 -0700 Subject: [PATCH 07/27] Guard nonlinear implicit system test with necessary nonlinear solver package Co-Authored-By: Claude --- tests/systems/nonlinear_implicit_system_test.C | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/systems/nonlinear_implicit_system_test.C b/tests/systems/nonlinear_implicit_system_test.C index 4b3478fc72a..df4e364f0d8 100644 --- a/tests/systems/nonlinear_implicit_system_test.C +++ b/tests/systems/nonlinear_implicit_system_test.C @@ -15,6 +15,13 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#include + +// NonlinearSolver::build() only has a working implementation when built +// against one of these packages; without either, constructing a +// NonlinearImplicitSystem throws unconditionally. +#if defined(LIBMESH_HAVE_PETSC) || defined(LIBMESH_TRILINOS_HAVE_NOX) + #include #include #include @@ -189,3 +196,5 @@ public: }; CPPUNIT_TEST_SUITE_REGISTRATION(NonlinearImplicitSystemOperatorMatrixTest); + +#endif // LIBMESH_HAVE_PETSC || LIBMESH_TRILINOS_HAVE_NOX From 1257fb62fc3f62513dcc97b67bd6ba206bf39a4b Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Sun, 6 Sep 2026 14:07:48 -0700 Subject: [PATCH 08/27] Explicitly allow calling zero() on shells Co-Authored-By: Claude --- src/numerics/petsc_matrix_shell_matrix.C | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/numerics/petsc_matrix_shell_matrix.C b/src/numerics/petsc_matrix_shell_matrix.C index 5b1c22b6308..5b558e53307 100644 --- a/src/numerics/petsc_matrix_shell_matrix.C +++ b/src/numerics/petsc_matrix_shell_matrix.C @@ -58,7 +58,8 @@ template void PetscMatrixShellMatrix::zero() { - libmesh_error(); + // A shell matrix computes its action and stores no entries, so there is nothing to clear. This is + // reachable through System::init_matrices(), which zeroes every matrix it initializes. } template From dcaec4b8c666f95659e71799b4162f88a5ac123c Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Mon, 7 Sep 2026 21:44:56 -0700 Subject: [PATCH 09/27] Add Elem::face_orientation() and Elem::edge_orientation() positive_face_orientation() reports the direction in which a face's vertices run, which is a single bit. A basis whose shape functions follow the order of a face's vertices needs the whole ordering, including which vertex is the lexicographically least, so that two elements sharing a face arrive at the same shape function for a degree of freedom they share. That single bit leaves the least vertex of a face with more than three vertices open. face_orientation() carries the whole ordering, as twice the position that the least vertex takes in the face's node map plus the direction bit, so it runs over the six symmetries of a triangular face or the eight of a quadrilateral face. positive_face_orientation() now reads its low bit. edge_orientation() gives an edge's single bit the same spelling, for callers that index over edges and faces alike. The new ElemTest cases hold face_orientation() to agreeing with positive_face_orientation() and to naming the least vertex, and hold two elements sharing a face to the same ordering of that face's vertices, which is the property that lets the index select a conforming shape function. Co-Authored-By: Claude --- include/geom/elem.h | 28 +++++++++++ src/geom/elem.C | 16 ++++++- tests/geom/elem_test.C | 104 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 1 deletion(-) diff --git a/include/geom/elem.h b/include/geom/elem.h index 75611008ce7..68edac1ab2e 100644 --- a/include/geom/elem.h +++ b/include/geom/elem.h @@ -1159,6 +1159,34 @@ class Elem : public ReferenceCountedObject, */ bool positive_face_orientation(const unsigned int i) const; + /** + * \returns The orientation of edge \p i, which is 1 when the edge is positively + * oriented and 0 when it is not. + * + * A basis whose shape functions depend on the order of an edge's vertices, such as a + * hierarchic basis of order two or above, consumes this index to select the shape + * functions of the degrees of freedom that the edge owns. + */ + unsigned int edge_orientation(const unsigned int i) const; + + /** + * \returns The orientation of face \p i, an index over the symmetries of the face. + * + * The orientation of a face is the ordering that the positions of the face's vertices + * induce on them: which vertex is the lexicographically least, together with the + * direction in which the remaining vertices run from it. This index carries both, as + * twice the position that the least vertex takes in the face's node map plus one when + * the face is positively oriented, so it runs over the six symmetries of a triangular + * face or the eight of a quadrilateral face. + * + * A basis whose shape functions depend on the order of a face's vertices, such as a + * hierarchic basis of order three or above, consumes this index to select the shape + * functions of the degrees of freedom that the face owns. The single bit that + * \p positive_face_orientation carries fixes the direction alone, which leaves the + * least vertex of a face with more than three vertices open. + */ + unsigned int face_orientation(const unsigned int i) const; + /** * \returns \p true iff, for an edge \p e on side \p s, the node map for * side \p s is such that the first vertex (i.e. zeroth node) of \p e is diff --git a/src/geom/elem.C b/src/geom/elem.C index 9440ddd9307..a10136f48d8 100644 --- a/src/geom/elem.C +++ b/src/geom/elem.C @@ -3641,6 +3641,20 @@ Elem::positive_edge_orientation(const unsigned int i) const bool Elem::positive_face_orientation(const unsigned int i) const +{ + return this->face_orientation(i) % 2; +} + + +unsigned int +Elem::edge_orientation(const unsigned int i) const +{ + return this->positive_edge_orientation(i); +} + + +unsigned int +Elem::face_orientation(const unsigned int i) const { libmesh_assert_less (i, this->n_faces()); @@ -3657,7 +3671,7 @@ Elem::positive_face_orientation(const unsigned int i) const const unsigned int v = std::distance(nodes.begin(), std::min_element(nodes.begin(), nodes.begin() + N, cmp)); - return cmp(nodes[(v - 1 + N) % N], nodes[(v + 1) % N]); + return 2 * v + cmp(nodes[(v - 1 + N) % N], nodes[(v + 1) % N]); } bool diff --git a/tests/geom/elem_test.C b/tests/geom/elem_test.C index 943e4f8554e..f03882ed8ac 100644 --- a/tests/geom/elem_test.C +++ b/tests/geom/elem_test.C @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -588,6 +589,107 @@ public: } } + /** + * The sequence of a face's vertices that its orientation index picks out, which starts at the + * lexicographically least vertex and runs in the direction the index records. + */ + std::vector oriented_face_nodes(const Elem & elem, const unsigned int face) + { + const unsigned int n_vertices = Elem::type_to_n_sides_map[elem.side_type(face)]; + const std::vector nodes = elem.nodes_on_side(face); + + const unsigned int orientation = elem.face_orientation(face); + const unsigned int least = orientation / 2; + const bool positive = orientation % 2; + + std::vector sequence; + for (const auto k : make_range(n_vertices)) + sequence.push_back(elem.node_ptr(nodes[(least + (positive ? n_vertices - k : k)) % + n_vertices])); + + return sequence; + } + + void test_orientation() + { + LOG_UNIT_TEST; + + for (const auto & elem : this->_mesh->active_local_element_ptr_range()) + { + if (elem->infinite() || elem->type() == C0POLYHEDRON) + continue; + + // Permuting an element keeps its vertices where they are and renumbers them, which is + // what an orientation index has to see through + for (const auto p : make_range(elem->n_permutations())) + { + elem->permute(p); + + for (const auto e : make_range(elem->n_edges())) + { + const bool positive = elem->point(elem->local_edge_node(e, 0)) > + elem->point(elem->local_edge_node(e, 1)); + + CPPUNIT_ASSERT_EQUAL(static_cast(positive), + elem->edge_orientation(e)); + CPPUNIT_ASSERT_EQUAL(positive, elem->positive_edge_orientation(e)); + } + + for (const auto f : make_range(elem->n_faces())) + { + const unsigned int n_vertices = + Elem::type_to_n_sides_map[elem->side_type(f)]; + const std::vector nodes = elem->nodes_on_side(f); + + // The lexicographically least vertex of the face, and the direction that + // the vertices adjacent to it run in + unsigned int least = 0; + for (const auto v : make_range(1u, n_vertices)) + if (elem->point(nodes[v]) < elem->point(nodes[least])) + least = v; + + const bool positive = + elem->point(nodes[(least + n_vertices - 1) % n_vertices]) < + elem->point(nodes[(least + 1) % n_vertices]); + + const unsigned int orientation = elem->face_orientation(f); + + CPPUNIT_ASSERT_LESS(2 * n_vertices, orientation); + CPPUNIT_ASSERT_EQUAL(2 * least + static_cast(positive), + orientation); + CPPUNIT_ASSERT_EQUAL(positive, elem->positive_face_orientation(f)); + } + } + } + } + + void test_orientation_conformity() + { + LOG_UNIT_TEST; + + // Two elements sharing a face number its vertices differently and may wind it in opposite + // directions, so their orientation indices differ. What the indices agree on is the sequence + // of vertices they pick out, which is what lets a basis whose face shape functions follow that + // sequence stay conforming across the face. + for (const auto & elem : this->_mesh->active_local_element_ptr_range()) + { + if (elem->infinite() || elem->type() == C0POLYHEDRON) + continue; + + for (const auto f : make_range(elem->n_faces())) + { + const Elem * neighbor = elem->neighbor_ptr(f); + if (!neighbor || neighbor == remote_elem || neighbor->infinite()) + continue; + + const unsigned int f_neighbor = neighbor->which_neighbor_am_i(elem); + + CPPUNIT_ASSERT(oriented_face_nodes(*elem, f) == + oriented_face_nodes(*neighbor, f_neighbor)); + } + } + } + void test_center_node_on_side() { LOG_UNIT_TEST; @@ -978,6 +1080,8 @@ public: CPPUNIT_TEST( test_flip ); \ CPPUNIT_TEST( test_orient ); \ CPPUNIT_TEST( test_orient_elements ); \ + CPPUNIT_TEST( test_orientation ); \ + CPPUNIT_TEST( test_orientation_conformity ); \ CPPUNIT_TEST( test_contains_point_node ); \ CPPUNIT_TEST( test_center_node_on_side ); \ CPPUNIT_TEST( test_side_type ); \ From 83c6c9e05d26441d55b8ad17ca5558d4bdc4038f Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Mon, 7 Sep 2026 21:45:11 -0700 Subject: [PATCH 10/27] Fix 3D hierarchic shape functions across shared faces A hierarchic basis of order three or above places degrees of freedom on the faces of a 3D element, and the two elements sharing a face have to arrive at the same shape function for each of them. Seven places did not. HEX27, in cube_indices(): face 1 case 7 and face 5 case 8 rewrote the reference coordinates with the transformation of another case, so two of the eight symmetries of those faces produced a shape function belonging to a different symmetry. PRISM*, in prism_indices(): a transposing case has to swap either the mode indices or the in-plane coordinates. The transposing cases of all three quadrilateral faces did both, which cancels, so two symmetries differing only in the direction bit produced identical shape functions. Face 2 case 1 hard-coded the offset from an edge to the second triangle's numbering, which holds only at order three, and cases 5 through 8 of that face reflected a coordinate that needs no reflection there. PRISM*, in fe_hierarchic_3D_shape(): the parity of a triangle edge mode was taken from the wrong index base, which agrees with the mode number only at order three. PRISM*, in prism_indices(): the interior basis of a triangle is not symmetric in its barycentric coordinates, so the two triangular faces need those coordinates ordered by the face's vertices, as the tetrahedral faces already are. The comment saying the TRI code handled this was mistaken; it orders the edge modes of a triangle, not the barycentric coordinates a face's interior modes read. HEX27, in cube_remap(): the flip bit of a quadrilateral face compared the least node of the face against a neighbor, which is true for any two distinct points, so the four symmetries reached through a reflection were unreachable and SIDE_HIERARCHIC was non-conforming from order three up. Rotating the least node to the origin leaves the reflection about the diagonal through it, which is settled by which of that node's two neighbors is the lesser, as orient_quad() already does. The new FEOrientationTest holds each family to two properties on a skewed mesh: that the shape functions of a degree of freedom follow the orientation index of the one entity that owns it, and that two elements sharing a side agree on the shape function of a degree of freedom they share. Every one of the fixes above is needed for a case of the second property, and the first property is what lets a cache of reference shape functions carry one entry per entity and orientation. A side-only family has no shape value at an interior point, so FEConformityTest registers the second property alone. Co-Authored-By: Claude --- src/fe/fe_hierarchic_shape_3D.C | 93 ++++---- tests/Makefile.am | 1 + tests/Makefile.in | 165 ++++++++++++--- tests/fe/fe_orientation_test.C | 365 ++++++++++++++++++++++++++++++++ 4 files changed, 553 insertions(+), 71 deletions(-) create mode 100644 tests/fe/fe_orientation_test.C diff --git a/src/fe/fe_hierarchic_shape_3D.C b/src/fe/fe_hierarchic_shape_3D.C index 359cd59c7ea..f986e3ec20c 100644 --- a/src/fe/fe_hierarchic_shape_3D.C +++ b/src/fe/fe_hierarchic_shape_3D.C @@ -43,6 +43,9 @@ std::array oriented_prism_nodes(const Elem & elem, std::array oriented_tet_nodes(const Elem & elem, unsigned int face_num); +void orient_triangle(const Elem & elem, + unsigned int * face_vertex); + template Real fe_hierarchic_3D_shape(const Elem * elem, const Order order, @@ -133,7 +136,12 @@ void cube_remap(unsigned int & side_i, else { unsigned int min_side_node = remap_node<4>(0, side, 0); - const bool flip = (side.point(min_side_node) < side.point((min_side_node+1)%4)); + + // Rotating the least node of the side to the origin leaves the + // reflection about the diagonal through it, which is settled by + // which of that node's two neighbors is the lesser. + const bool flip = (side.point((min_side_node+3)%4) < + side.point((min_side_node+1)%4)); switch (min_side_node) { case 0: @@ -470,8 +478,8 @@ void cube_indices(const Elem * elem, if (!elem->positive_face_orientation(1)) { // Case 7 - xi = -xi_saved; - zeta = zeta_saved; + xi = -zeta_saved; + zeta = xi_saved; } else { @@ -745,7 +753,7 @@ void cube_indices(const Elem * elem, { // Case 8 xi = xi_saved; - eta = eta_saved; + eta = -eta_saved; } } } @@ -761,6 +769,27 @@ void cube_indices(const Elem * elem, } +// Reorder the barycentric coordinates of a triangular face of a prism, whose vertices begin at +// \p first_vertex, so that they follow the order of the face's vertices. The interior basis of a +// triangle is not symmetric in its barycentric coordinates, so a face shared between two elements +// needs them ordered the same way from both sides. +void orient_triangle_coords(const Elem & elem, + const unsigned int first_vertex, + const Point & xi_eta_saved, + Point & xi_eta) +{ + unsigned int face_vertex[3] = {first_vertex, first_vertex+1, first_vertex+2}; + orient_triangle(elem, face_vertex); + + const Real barycentric[3] = {1 - xi_eta_saved(0) - xi_eta_saved(1), + xi_eta_saved(0), + xi_eta_saved(1)}; + + xi_eta(0) = barycentric[face_vertex[1] - first_vertex]; + xi_eta(1) = barycentric[face_vertex[2] - first_vertex]; +} + + void prism_indices(const Elem * elem, const unsigned int totalorder, const unsigned int i, @@ -861,8 +890,6 @@ void prism_indices(const Elem * elem, // Case 2: flip about 0-4 diagonal i01 = s1+1; i2 = s0; - zeta = 2*xe_fraction-1; - xi_eta(0) = (zeta_saved+1)*xe_scale/2; } } else if (elem->point(3) == min_point) @@ -872,8 +899,7 @@ void prism_indices(const Elem * elem, // Case 3: 0->3->4->1->0 rotation i01 = s1+1; i2 = s0; - zeta = 1-2*xe_fraction; - xi_eta(0) = (zeta_saved+1)*xe_scale/2; + zeta = -zeta_saved; } else { @@ -890,8 +916,7 @@ void prism_indices(const Elem * elem, // Case 5: 0->1->4->3->0 rotation i01 = s1+1; i2 = s0; - zeta = 2*xe_fraction-1; - xi_eta(0) = (1-zeta_saved)*xe_scale/2; + xi_eta(0) = (1-xe_fraction)*xe_scale; } else { @@ -916,8 +941,8 @@ void prism_indices(const Elem * elem, // Case 8: flip about 1-3 diagonal i01 = s1+1; i2 = s0; - zeta = 1-2*xe_fraction; - xi_eta(0) = (1-zeta_saved)*xe_scale/2; + xi_eta(0) = (1-xe_fraction)*xe_scale; + zeta = -zeta_saved; } } } @@ -944,7 +969,7 @@ void prism_indices(const Elem * elem, if (!elem->positive_face_orientation(2)) { // Case 1: no flips needed - i01 = s0+1+3; // edge to triangle side 1 numbering + i01 = s0+1+e; // edge to triangle side 1 numbering i2 = s1; } else @@ -952,10 +977,6 @@ void prism_indices(const Elem * elem, // Case 2: flip about 1-5 diagonal i01 = s1+1+e; i2 = s0; - zeta = 2*xe_fraction-1; - const Real xe = (zeta_saved+1)/2; - xi_eta(1) = xe*xe_scale; - xi_eta(0) = xe_scale - xi_eta(1); } } else if (elem->point(4) == min_point) @@ -965,10 +986,7 @@ void prism_indices(const Elem * elem, // Case 3: 1->4->5->2->1 rotation i01 = s1+1+e; i2 = s0; - zeta = 1-2*xe_fraction; - const Real xe = (zeta_saved+1)/2; - xi_eta(1) = xe*xe_scale; - xi_eta(0) = xe_scale - xi_eta(1); + zeta = -zeta_saved; } else { @@ -985,8 +1003,7 @@ void prism_indices(const Elem * elem, // Case 5: 1->2->5->4->1 rotation i01 = s1+1+e; i2 = s0; - zeta = 2*xe_fraction-1; - const Real xe = (1-zeta_saved)/2; + const Real xe = xe_fraction; xi_eta(1) = xe*xe_scale; xi_eta(0) = xe_scale - xi_eta(1); } @@ -995,7 +1012,7 @@ void prism_indices(const Elem * elem, // Case 6: flip about 7-13 midline i01 = s0+1+e; i2 = s1; - const Real xe = (1-xe_fraction); + const Real xe = xe_fraction; xi_eta(1) = xe*xe_scale; xi_eta(0) = xe_scale - xi_eta(1); } @@ -1008,17 +1025,17 @@ void prism_indices(const Elem * elem, i01 = s0+1+e; i2 = s1; zeta = -zeta_saved; - const Real xe = (1-xe_fraction); + const Real xe = xe_fraction; xi_eta(1) = xe*xe_scale; xi_eta(0) = xe_scale - xi_eta(1); } else { - // Case 8: flip about 1-3 diagonal + // Case 8: flip about 2-4 diagonal i01 = s1+1+e; i2 = s0; - zeta = 1-2*xe_fraction; - const Real xe = (1-zeta_saved)/2; + zeta = -zeta_saved; + const Real xe = xe_fraction; xi_eta(1) = xe*xe_scale; xi_eta(0) = xe_scale - xi_eta(1); } @@ -1055,9 +1072,6 @@ void prism_indices(const Elem * elem, // Case 2: flip about 2-3 diagonal i01 = s1+1+2*e; i2 = s0; - zeta = 2*xe_fraction-1; - const Real xe = (zeta_saved+1)/2; - xi_eta(1) = xe_scale - xe*xe_scale; } } else if (elem->point(5) == min_point) @@ -1067,9 +1081,7 @@ void prism_indices(const Elem * elem, // Case 3: 2->5->3->0->2 rotation i01 = s1+1+2*e; i2 = s0; - zeta = 1-2*xe_fraction; - const Real xe = (zeta_saved+1)/2; - xi_eta(1) = xe_scale - xe*xe_scale; + zeta = -zeta_saved; } else { @@ -1086,8 +1098,7 @@ void prism_indices(const Elem * elem, // Case 5: 2->0->3->5->2 rotation i01 = s1+1+2*e; i2 = s0; - zeta = 2*xe_fraction-1; - const Real xe = (1-zeta_saved)/2; + const Real xe = (1-xe_fraction); xi_eta(1) = xe_scale - xe*xe_scale; } else @@ -1115,8 +1126,8 @@ void prism_indices(const Elem * elem, // Case 8: flip about 0-5 diagonal i01 = s1+1+2*e; i2 = s0; - zeta = 1-2*xe_fraction; - const Real xe = (1-zeta_saved)/2; + zeta = -zeta_saved; + const Real xe = (1-xe_fraction); xi_eta(1) = xe_scale - xe*xe_scale; } } @@ -1124,16 +1135,16 @@ void prism_indices(const Elem * elem, // Face 0, node 18 - node order due to hierarchic numbering else if (i < 6 + 9*e + 3*e*e + e*(e-1)/2) { - // The TRI code will handle any flips here i01 = i - 3 - 6*e - 3*e*e; i2 = 0; + orient_triangle_coords(*elem, 0, xi_eta_saved, xi_eta); } // Face 4 else if (i < 6 + 9*e + 3*e*e + e*(e-1)) { - // The TRI code will handle any flips here i01 = i - 3 - 6*e - 3*e*e - e*(e-1)/2; i2 = 1; + orient_triangle_coords(*elem, 3, xi_eta_saved, xi_eta); } // Internal DoFs else @@ -2338,7 +2349,7 @@ Real fe_hierarchic_3D_shape(const Elem * elem, if (i01 > 2 && i01 < 3u*totalorder) { // %(p-1) to find the edge number, %2 for even vs odd - const bool odd_basis = ((i01-1)%(totalorder-1))%2; + const bool odd_basis = ((i01-3)%(totalorder-1))%2; if (odd_basis) { const int tri_edge = (i01-3)/(totalorder-1); diff --git a/tests/Makefile.am b/tests/Makefile.am index 6af2d501f82..6f50e5a2287 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -31,6 +31,7 @@ unit_tests_sources = \ fe/fe_hdiv_grad_test.C \ fe/fe_hermite_test.C \ fe/fe_hierarchic_test.C \ + fe/fe_orientation_test.C \ fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C \ fe/fe_l2_lagrange_test.C \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 4f27821a45c..3ad1e6a277e 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -216,11 +216,11 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ base/multi_evaluable_pred_test.C fe/fe_bernstein_test.C \ fe/fe_clough_test.C fe/fe_hdiv_grad_test.C \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ - fe/inf_fe_radial_test.C fe/fe_l2_hierarchic_test.C \ - fe/fe_l2_lagrange_test.C fe/fe_lagrange_test.C \ - fe/fe_monomial_test.C fe/fe_rational_map.C \ - fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ - fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ + fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_lagrange_test.C fe/fe_monomial_test.C \ + fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ + fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -301,6 +301,7 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ fe/unit_tests_dbg-fe_hdiv_grad_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_hermite_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_hierarchic_test.$(OBJEXT) \ + fe/unit_tests_dbg-fe_orientation_test.$(OBJEXT) \ fe/unit_tests_dbg-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_lagrange_test.$(OBJEXT) \ @@ -433,11 +434,11 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ base/multi_evaluable_pred_test.C fe/fe_bernstein_test.C \ fe/fe_clough_test.C fe/fe_hdiv_grad_test.C \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ - fe/inf_fe_radial_test.C fe/fe_l2_hierarchic_test.C \ - fe/fe_l2_lagrange_test.C fe/fe_lagrange_test.C \ - fe/fe_monomial_test.C fe/fe_rational_map.C \ - fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ - fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ + fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_lagrange_test.C fe/fe_monomial_test.C \ + fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ + fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -517,6 +518,7 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ fe/unit_tests_devel-fe_hdiv_grad_test.$(OBJEXT) \ fe/unit_tests_devel-fe_hermite_test.$(OBJEXT) \ fe/unit_tests_devel-fe_hierarchic_test.$(OBJEXT) \ + fe/unit_tests_devel-fe_orientation_test.$(OBJEXT) \ fe/unit_tests_devel-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_lagrange_test.$(OBJEXT) \ @@ -667,11 +669,11 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ base/multi_evaluable_pred_test.C fe/fe_bernstein_test.C \ fe/fe_clough_test.C fe/fe_hdiv_grad_test.C \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ - fe/inf_fe_radial_test.C fe/fe_l2_hierarchic_test.C \ - fe/fe_l2_lagrange_test.C fe/fe_lagrange_test.C \ - fe/fe_monomial_test.C fe/fe_rational_map.C \ - fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ - fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ + fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_lagrange_test.C fe/fe_monomial_test.C \ + fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ + fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -751,6 +753,7 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ fe/unit_tests_oprof-fe_hdiv_grad_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_hermite_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_hierarchic_test.$(OBJEXT) \ + fe/unit_tests_oprof-fe_orientation_test.$(OBJEXT) \ fe/unit_tests_oprof-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_lagrange_test.$(OBJEXT) \ @@ -879,11 +882,11 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ base/multi_evaluable_pred_test.C fe/fe_bernstein_test.C \ fe/fe_clough_test.C fe/fe_hdiv_grad_test.C \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ - fe/inf_fe_radial_test.C fe/fe_l2_hierarchic_test.C \ - fe/fe_l2_lagrange_test.C fe/fe_lagrange_test.C \ - fe/fe_monomial_test.C fe/fe_rational_map.C \ - fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ - fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ + fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_lagrange_test.C fe/fe_monomial_test.C \ + fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ + fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -963,6 +966,7 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ fe/unit_tests_opt-fe_hdiv_grad_test.$(OBJEXT) \ fe/unit_tests_opt-fe_hermite_test.$(OBJEXT) \ fe/unit_tests_opt-fe_hierarchic_test.$(OBJEXT) \ + fe/unit_tests_opt-fe_orientation_test.$(OBJEXT) \ fe/unit_tests_opt-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_lagrange_test.$(OBJEXT) \ @@ -1091,11 +1095,11 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ base/multi_evaluable_pred_test.C fe/fe_bernstein_test.C \ fe/fe_clough_test.C fe/fe_hdiv_grad_test.C \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ - fe/inf_fe_radial_test.C fe/fe_l2_hierarchic_test.C \ - fe/fe_l2_lagrange_test.C fe/fe_lagrange_test.C \ - fe/fe_monomial_test.C fe/fe_rational_map.C \ - fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ - fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ + fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_lagrange_test.C fe/fe_monomial_test.C \ + fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ + fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -1175,6 +1179,7 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ fe/unit_tests_prof-fe_hdiv_grad_test.$(OBJEXT) \ fe/unit_tests_prof-fe_hermite_test.$(OBJEXT) \ fe/unit_tests_prof-fe_hierarchic_test.$(OBJEXT) \ + fe/unit_tests_prof-fe_orientation_test.$(OBJEXT) \ fe/unit_tests_prof-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_lagrange_test.$(OBJEXT) \ @@ -1359,6 +1364,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po \ + fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_rational_map.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_rational_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_side_test.Po \ @@ -1375,6 +1381,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po \ + fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_rational_map.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_rational_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_side_test.Po \ @@ -1391,6 +1398,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po \ + fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_rational_map.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_rational_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_side_test.Po \ @@ -1407,6 +1415,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po \ + fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_rational_map.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_rational_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_side_test.Po \ @@ -1423,6 +1432,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po \ + fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_rational_map.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_rational_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_side_test.Po \ @@ -2447,11 +2457,11 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ base/multi_evaluable_pred_test.C fe/fe_bernstein_test.C \ fe/fe_clough_test.C fe/fe_hdiv_grad_test.C \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ - fe/inf_fe_radial_test.C fe/fe_l2_hierarchic_test.C \ - fe/fe_l2_lagrange_test.C fe/fe_lagrange_test.C \ - fe/fe_monomial_test.C fe/fe_rational_map.C \ - fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ - fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ + fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_lagrange_test.C fe/fe_monomial_test.C \ + fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ + fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -2802,6 +2812,8 @@ fe/unit_tests_dbg-fe_hermite_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_dbg-fe_orientation_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-inf_fe_radial_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_l2_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3124,6 +3136,8 @@ fe/unit_tests_devel-fe_hermite_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_devel-fe_orientation_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-inf_fe_radial_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_l2_hierarchic_test.$(OBJEXT): \ @@ -3426,6 +3440,8 @@ fe/unit_tests_oprof-fe_hermite_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_oprof-fe_orientation_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-inf_fe_radial_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_l2_hierarchic_test.$(OBJEXT): \ @@ -3688,6 +3704,8 @@ fe/unit_tests_opt-fe_hermite_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_opt-fe_orientation_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-inf_fe_radial_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_l2_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3950,6 +3968,8 @@ fe/unit_tests_prof-fe_hermite_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_prof-fe_orientation_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-inf_fe_radial_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_l2_hierarchic_test.$(OBJEXT): \ @@ -4257,6 +4277,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_rational_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_rational_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_side_test.Po@am__quote@ # am--include-marker @@ -4273,6 +4294,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_rational_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_rational_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_side_test.Po@am__quote@ # am--include-marker @@ -4289,6 +4311,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_rational_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_rational_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_side_test.Po@am__quote@ # am--include-marker @@ -4305,6 +4328,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_rational_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_rational_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_side_test.Po@am__quote@ # am--include-marker @@ -4321,6 +4345,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_rational_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_rational_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_side_test.Po@am__quote@ # am--include-marker @@ -5050,6 +5075,20 @@ fe/unit_tests_dbg-fe_hierarchic_test.obj: fe/fe_hierarchic_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_hierarchic_test.obj `if test -f 'fe/fe_hierarchic_test.C'; then $(CYGPATH_W) 'fe/fe_hierarchic_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_hierarchic_test.C'; fi` +fe/unit_tests_dbg-fe_orientation_test.o: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_orientation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Tpo -c -o fe/unit_tests_dbg-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_dbg-fe_orientation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C + +fe/unit_tests_dbg-fe_orientation_test.obj: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_orientation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Tpo -c -o fe/unit_tests_dbg-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_dbg-fe_orientation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` + fe/unit_tests_dbg-inf_fe_radial_test.o: fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-inf_fe_radial_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-inf_fe_radial_test.Tpo -c -o fe/unit_tests_dbg-inf_fe_radial_test.o `test -f 'fe/inf_fe_radial_test.C' || echo '$(srcdir)/'`fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-inf_fe_radial_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-inf_fe_radial_test.Po @@ -6814,6 +6853,20 @@ fe/unit_tests_devel-fe_hierarchic_test.obj: fe/fe_hierarchic_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_hierarchic_test.obj `if test -f 'fe/fe_hierarchic_test.C'; then $(CYGPATH_W) 'fe/fe_hierarchic_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_hierarchic_test.C'; fi` +fe/unit_tests_devel-fe_orientation_test.o: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_orientation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Tpo -c -o fe/unit_tests_devel-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_devel-fe_orientation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C + +fe/unit_tests_devel-fe_orientation_test.obj: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_orientation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Tpo -c -o fe/unit_tests_devel-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_devel-fe_orientation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` + fe/unit_tests_devel-inf_fe_radial_test.o: fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-inf_fe_radial_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-inf_fe_radial_test.Tpo -c -o fe/unit_tests_devel-inf_fe_radial_test.o `test -f 'fe/inf_fe_radial_test.C' || echo '$(srcdir)/'`fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-inf_fe_radial_test.Tpo fe/$(DEPDIR)/unit_tests_devel-inf_fe_radial_test.Po @@ -8578,6 +8631,20 @@ fe/unit_tests_oprof-fe_hierarchic_test.obj: fe/fe_hierarchic_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_hierarchic_test.obj `if test -f 'fe/fe_hierarchic_test.C'; then $(CYGPATH_W) 'fe/fe_hierarchic_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_hierarchic_test.C'; fi` +fe/unit_tests_oprof-fe_orientation_test.o: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_orientation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Tpo -c -o fe/unit_tests_oprof-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_oprof-fe_orientation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C + +fe/unit_tests_oprof-fe_orientation_test.obj: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_orientation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Tpo -c -o fe/unit_tests_oprof-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_oprof-fe_orientation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` + fe/unit_tests_oprof-inf_fe_radial_test.o: fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-inf_fe_radial_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-inf_fe_radial_test.Tpo -c -o fe/unit_tests_oprof-inf_fe_radial_test.o `test -f 'fe/inf_fe_radial_test.C' || echo '$(srcdir)/'`fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-inf_fe_radial_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-inf_fe_radial_test.Po @@ -10342,6 +10409,20 @@ fe/unit_tests_opt-fe_hierarchic_test.obj: fe/fe_hierarchic_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_hierarchic_test.obj `if test -f 'fe/fe_hierarchic_test.C'; then $(CYGPATH_W) 'fe/fe_hierarchic_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_hierarchic_test.C'; fi` +fe/unit_tests_opt-fe_orientation_test.o: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_orientation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Tpo -c -o fe/unit_tests_opt-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_opt-fe_orientation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C + +fe/unit_tests_opt-fe_orientation_test.obj: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_orientation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Tpo -c -o fe/unit_tests_opt-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_opt-fe_orientation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` + fe/unit_tests_opt-inf_fe_radial_test.o: fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-inf_fe_radial_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-inf_fe_radial_test.Tpo -c -o fe/unit_tests_opt-inf_fe_radial_test.o `test -f 'fe/inf_fe_radial_test.C' || echo '$(srcdir)/'`fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-inf_fe_radial_test.Tpo fe/$(DEPDIR)/unit_tests_opt-inf_fe_radial_test.Po @@ -12106,6 +12187,20 @@ fe/unit_tests_prof-fe_hierarchic_test.obj: fe/fe_hierarchic_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_hierarchic_test.obj `if test -f 'fe/fe_hierarchic_test.C'; then $(CYGPATH_W) 'fe/fe_hierarchic_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_hierarchic_test.C'; fi` +fe/unit_tests_prof-fe_orientation_test.o: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_orientation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Tpo -c -o fe/unit_tests_prof-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_prof-fe_orientation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_orientation_test.o `test -f 'fe/fe_orientation_test.C' || echo '$(srcdir)/'`fe/fe_orientation_test.C + +fe/unit_tests_prof-fe_orientation_test.obj: fe/fe_orientation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_orientation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Tpo -c -o fe/unit_tests_prof-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_orientation_test.C' object='fe/unit_tests_prof-fe_orientation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_orientation_test.obj `if test -f 'fe/fe_orientation_test.C'; then $(CYGPATH_W) 'fe/fe_orientation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_orientation_test.C'; fi` + fe/unit_tests_prof-inf_fe_radial_test.o: fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-inf_fe_radial_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-inf_fe_radial_test.Tpo -c -o fe/unit_tests_prof-inf_fe_radial_test.o `test -f 'fe/inf_fe_radial_test.C' || echo '$(srcdir)/'`fe/inf_fe_radial_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-inf_fe_radial_test.Tpo fe/$(DEPDIR)/unit_tests_prof-inf_fe_radial_test.Po @@ -14101,6 +14196,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_side_test.Po @@ -14117,6 +14213,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_side_test.Po @@ -14133,6 +14230,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_side_test.Po @@ -14149,6 +14247,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_side_test.Po @@ -14165,6 +14264,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_side_test.Po @@ -14778,6 +14878,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_side_test.Po @@ -14794,6 +14895,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_side_test.Po @@ -14810,6 +14912,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_side_test.Po @@ -14826,6 +14929,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_side_test.Po @@ -14842,6 +14946,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_rational_map.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_rational_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_side_test.Po diff --git a/tests/fe/fe_orientation_test.C b/tests/fe/fe_orientation_test.C new file mode 100644 index 00000000000..a29cccb1d78 --- /dev/null +++ b/tests/fe/fe_orientation_test.C @@ -0,0 +1,365 @@ +// A basis whose shape functions follow the order of an element's vertices, such as HIERARCHIC of +// order two and above, reads that order back from Elem::edge_orientation() and +// Elem::face_orientation(). Every degree of freedom of such a basis belongs to one vertex, edge, or +// face of the element, or to the element's interior, and its shape function follows the orientation +// of that one entity. These tests hold the families to that, which is what lets a cache of +// reference shape functions carry one entry per entity and orientation. +// +// The orientation indices of two elements sharing a side differ, since each element numbers the +// side's vertices its own way, and the indices exist so that both elements arrive at the same shape +// function for a degree of freedom they share. The conformity test holds the families to that. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +#include +#include +#include +#include +#include +#include + +using namespace libMesh; + +/// The entity of an element that owns a degree of freedom, as a kind and an index within that kind +enum EntityKind : unsigned int { VERTEX = 0, EDGE = 1, FACE = 2, INTERIOR = 3 }; +typedef std::pair Entity; + +template +class FEOrientationTest : public CppUnit::TestCase +{ +protected: + std::unique_ptr _mesh; + std::string libmesh_suite_name; + +public: + void setUp() + { + _mesh = std::make_unique(*TestCommWorld); + + // The geometric element the family needs, reached from the first-order type that the mesh + // generator builds + ElemType base_type = elem_type; + bool second_order = false, complete_order = false; + + switch (elem_type) + { + case TRI6: base_type = TRI3; second_order = true; break; + case QUAD9: base_type = QUAD4; second_order = true; break; + case HEX27: base_type = HEX8; second_order = true; break; + case TET14: base_type = TET4; complete_order = true; break; + case PRISM21: base_type = PRISM6; complete_order = true; break; + default: libmesh_error(); + } + + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + + if (dim == 2) + MeshTools::Generation::build_square(*_mesh, 2, 2, 0., 1., 0., 1., base_type); + else + MeshTools::Generation::build_cube(*_mesh, 2, 2, 2, 0., 1., 0., 1., 0., 1., base_type); + + if (second_order) + _mesh->all_second_order(); + if (complete_order) + _mesh->all_complete_order(); + + // Skew the mesh so that no symmetry of an element masks a shape function that follows the + // wrong entity, and so that the vertices of an entity order differently from one element to + // the next. The skew is linear and orientation preserving, which leaves every element affine + // and valid, so that the map from a physical point back to a reference point is exact. + for (auto * node : _mesh->node_ptr_range()) + { + Node & p = *node; + const Real y = p(1), z = (LIBMESH_DIM > 2) ? p(2) : 0.; + + p(0) += 0.3 * y + 0.17 * z; + if (LIBMESH_DIM > 1) + p(1) += 0.23 * z; + } + } + + void tearDown() { _mesh.reset(); } + + /// The entity of \p elem that owns the degrees of freedom sitting on node \p n + Entity node_entity(const Elem & elem, const unsigned int n) + { + if (elem.is_vertex(n)) + return {VERTEX, n}; + + if (elem.is_edge(n)) + for (const auto e : make_range(elem.n_edges())) + if (elem.is_node_on_edge(n, e)) + return {EDGE, e}; + + if (elem.is_face(n)) + for (const auto f : make_range(elem.n_faces())) + if (elem.is_node_on_side(n, f)) + return {FACE, f}; + + return {INTERIOR, 0}; + } + + /// The orientation index that the shape functions of \p entity follow + unsigned int entity_orientation(const Elem & elem, const Entity & entity) + { + switch (entity.first) + { + case EDGE: return elem.edge_orientation(entity.second); + case FACE: return elem.face_orientation(entity.second); + default: return 0; + } + } + + void test_orientation_determines_shapes() + { + LOG_UNIT_TEST; + + const FEType fe_type(order, family); + + // How many entities were seen carrying more than one orientation, which is what the test + // compares shape functions across + unsigned int n_compared = 0; + + for (auto * elem : _mesh->active_local_element_ptr_range()) + { + QGauss qrule(elem->dim(), order); + qrule.init(*elem); + const std::vector & points = qrule.get_points(); + + // Per entity, the shape functions of its degrees of freedom, per orientation index + std::map>> seen; + + // Permuting an element leaves its vertices where they are and renumbers them, which walks + // its entities through a range of orientations + for (const auto p : make_range(elem->n_permutations())) + { + elem->permute(p); + + // libMesh numbers the degrees of freedom of an element by node, in node order, and + // then those of the element's interior + unsigned int dof = 0; + + for (const auto n : elem->node_index_range()) + { + const unsigned int n_dofs = FEInterface::n_dofs_at_node(fe_type, elem, n); + if (!n_dofs) + continue; + + record(seen[node_entity(*elem, n)], + entity_orientation(*elem, node_entity(*elem, n)), + shapes(fe_type, *elem, dof, n_dofs, points), + n_compared); + + dof += n_dofs; + } + + const unsigned int n_interior = FEInterface::n_dofs_per_elem(fe_type, elem); + if (n_interior) + record(seen[{INTERIOR, 0}], 0, + shapes(fe_type, *elem, dof, n_interior, points), n_compared); + } + } + + // A test that never saw an entity in two orientations would hold nothing + _mesh->comm().sum(n_compared); + CPPUNIT_ASSERT(n_compared > 0); + } + + void test_conformity_across_sides() + { + LOG_UNIT_TEST; + + const FEType fe_type(order, family); + + EquationSystems es(*_mesh); + System & sys = es.add_system("orientation"); + sys.add_variable("u", fe_type); + es.init(); + const DofMap & dof_map = sys.get_dof_map(); + + // How many degrees of freedom shared across a side were compared + unsigned int n_compared = 0; + + for (const auto round : make_range(n_rounds())) + { + // Permute by a function of the element id, so that every processor arrives at the same + // numbering for an element it shares with another. A permutation moves an element's node + // numbering and leaves its geometry and its degrees of freedom where they are. + for (auto * elem : _mesh->element_ptr_range()) + elem->permute((round + elem->id()) % elem->n_permutations()); + + for (const auto * elem : _mesh->active_local_element_ptr_range()) + { + std::vector dofs; + dof_map.dof_indices(elem, dofs); + + for (const auto s : make_range(elem->n_sides())) + { + const Elem * neighbor = elem->neighbor_ptr(s); + if (!neighbor || neighbor == remote_elem) + continue; + + std::vector neighbor_dofs; + dof_map.dof_indices(neighbor, neighbor_dofs); + + std::unique_ptr side = elem->build_side_ptr(s); + QGauss side_rule(side->dim(), order); + side_rule.init(*side); + + for (const auto & side_point : side_rule.get_points()) + { + const Point physical = FEMap::map(side->dim(), side.get(), side_point); + + // Solve the mapping to a tolerance well below the one the shape values are + // then held to, so that the comparison reads the shape functions rather than + // the accuracy of the mapping + const Point point = + FEMap::inverse_map(elem->dim(), elem, physical, map_tolerance); + const Point neighbor_point = + FEMap::inverse_map(neighbor->dim(), neighbor, physical, map_tolerance); + + for (const auto i : index_range(dofs)) + { + const auto it = + std::find(neighbor_dofs.begin(), neighbor_dofs.end(), dofs[i]); + if (it == neighbor_dofs.end()) + continue; + + const auto j = std::distance(neighbor_dofs.begin(), it); + + LIBMESH_ASSERT_FP_EQUAL( + FEInterface::shape(fe_type, elem, i, point), + FEInterface::shape(fe_type, neighbor, j, neighbor_point), + TOLERANCE); + ++n_compared; + } + } + } + } + } + + // A test that found no shared degree of freedom would hold nothing + _mesh->comm().sum(n_compared); + CPPUNIT_ASSERT(n_compared > 0); + } + +private: + /// The tolerance the mapping from a physical point back to a reference point is solved to + static constexpr Real map_tolerance = TOLERANCE * TOLERANCE; + + /** + * How many rounds of permutation to walk the mesh through. Composing a permutation per round + * carries the elements through a range of relative numberings of the sides they share. + */ + unsigned int n_rounds() const { return Elem::build(elem_type)->n_permutations(); } + + /// The shape functions of \p n_dofs degrees of freedom starting at \p first, at every point + std::vector shapes(const FEType & fe_type, + const Elem & elem, + const unsigned int first, + const unsigned int n_dofs, + const std::vector & points) + { + std::vector values; + + for (const auto & point : points) + for (const auto i : make_range(n_dofs)) + values.push_back(FEInterface::shape(fe_type, &elem, first + i, point)); + + return values; + } + + /** + * Hold the shape functions seen for an entity in one orientation against those seen for it in + * that same orientation before. + */ + void record(std::map> & seen, + const unsigned int orientation, + const std::vector & values, + unsigned int & n_compared) + { + const auto [entry, inserted] = seen.emplace(orientation, values); + if (inserted) + return; + + CPPUNIT_ASSERT_EQUAL(entry->second.size(), values.size()); + for (const auto k : index_range(values)) + LIBMESH_ASSERT_FP_EQUAL(entry->second[k], values[k], TOLERANCE * TOLERANCE); + + if (seen.size() > 1) + ++n_compared; + } +}; + +#define ORIENTATIONTEST \ + CPPUNIT_TEST( test_orientation_determines_shapes ); \ + CPPUNIT_TEST( test_conformity_across_sides ) + +#define INSTANTIATE_FEORIENTATIONTEST(elemtype, order, family) \ + class FEOrientationTest_##family##_##order##_##elemtype : \ + public FEOrientationTest { \ + public: \ + FEOrientationTest_##family##_##order##_##elemtype() : \ + FEOrientationTest() { \ + if (unitlog->summarized_logs_enabled()) \ + this->libmesh_suite_name = "FEOrientationTest"; \ + else \ + this->libmesh_suite_name = \ + "FEOrientationTest_" #family "_" #order "_" #elemtype; \ + } \ + CPPUNIT_TEST_SUITE( FEOrientationTest_##family##_##order##_##elemtype ); \ + ORIENTATIONTEST; \ + CPPUNIT_TEST_SUITE_END(); \ + }; \ + \ + CPPUNIT_TEST_SUITE_REGISTRATION( FEOrientationTest_##family##_##order##_##elemtype ) + +// A family whose degrees of freedom sit only on the sides of an element has no shape function to +// report at an interior point, so such a family is held to the conformity test alone. +#define INSTANTIATE_FECONFORMITYTEST(elemtype, order, family) \ + class FEConformityTest_##family##_##order##_##elemtype : \ + public FEOrientationTest { \ + public: \ + FEConformityTest_##family##_##order##_##elemtype() : \ + FEOrientationTest() { \ + if (unitlog->summarized_logs_enabled()) \ + this->libmesh_suite_name = "FEConformityTest"; \ + else \ + this->libmesh_suite_name = \ + "FEConformityTest_" #family "_" #order "_" #elemtype; \ + } \ + CPPUNIT_TEST_SUITE( FEConformityTest_##family##_##order##_##elemtype ); \ + CPPUNIT_TEST( test_conformity_across_sides ); \ + CPPUNIT_TEST_SUITE_END(); \ + }; \ + \ + CPPUNIT_TEST_SUITE_REGISTRATION( FEConformityTest_##family##_##order##_##elemtype ) + +INSTANTIATE_FEORIENTATIONTEST(TRI6, THIRD, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(QUAD9, THIRD, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(TET14, THIRD, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(TET14, FOURTH, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(HEX27, THIRD, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(HEX27, FOURTH, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(PRISM21, THIRD, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(PRISM21, FOURTH, HIERARCHIC); +INSTANTIATE_FECONFORMITYTEST(HEX27, THIRD, SIDE_HIERARCHIC); +INSTANTIATE_FECONFORMITYTEST(HEX27, FOURTH, SIDE_HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(HEX27, FIFTH, HIERARCHIC); From 9c519b5d94ca914722df18d6ffdbd09f489ed873 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Thu, 10 Sep 2026 16:58:19 -0700 Subject: [PATCH 11/27] Normalize the hierarchic bubble functions The one-dimensional hierarchic bubbles were (xi^p - 1)/p! for even p and (xi^p - xi)/p! for odd. The 1/p! makes a shape function shrink factorially with its order: at p = 8 it is about 2.5e-05, and a two-dimensional tensor product of two such factors carries its square. An operator assembled from that basis inherits the spread on its diagonal, because for the Laplacian the diagonal entry is the squared H1 seminorm of its shape function. On a 4x4 mesh of QUAD9 elements the diagonal of an order-8 stiffness matrix ran from 1.08e-17 to 8/3, so its smallest entry sat below the roundoff of its largest and the discretization was numerically singular in double precision however it was solved: its inverse overflowed a double from order 7 upward. The bubbles are now scaled to unit H1 seminorm on the reference interval, which replaces the factorial with a factor growing as the square root of the order. The same mesh now gives a diagonal from 0.128 to 8/3 at order 8 and a condition number of 4.4e+10, against a reciprocal machine epsilon of 4.5e+15, and the attainable residual of a solve there improves from 1.7e-12 to 4.0e-15. The two vertex functions are deliberately left unscaled. They are interpolatory, so their coefficients are values of the finite element solution at the vertices, and scaling them would change what a nodal boundary condition or a nodal output of a hierarchic variable means. This is a change of basis within one space, so the finite element solution is unaffected: the integral, L2 norm, H1 seminorm and interior point values of an order-8 solution with content in every mode all agree with the previous basis to every printed digit. Coefficient vectors change, and so does the 2-norm of a residual taken in them, which makes iteration counts and residual histories measured before and after incomparable. Two other sites carried the same factorial and move with it: the branch each of the 2D and 3D files takes when a triangle or tetrahedron edge coordinate vanishes is the limit of the general expression, so it needs the same scaling or the shape function is discontinuous there. The second derivative's general branch was also wrong for p of 8 or more, where it returned the first derivative's xi^(p-1)/(p-1)! rather than p (p-1) xi^(p-2). It is rewritten here rather than left in place, having had to be rewritten for the scaling anyway. Co-Authored-By: Claude --- include/fe/fe.h | 31 ++++++++ src/fe/fe_hierarchic_shape_1D.C | 133 ++++++-------------------------- src/fe/fe_hierarchic_shape_2D.C | 9 +-- src/fe/fe_hierarchic_shape_3D.C | 9 +-- 4 files changed, 61 insertions(+), 121 deletions(-) diff --git a/include/fe/fe.h b/include/fe/fe.h index c4b798e3f8d..4be2b29fd30 100644 --- a/include/fe/fe.h +++ b/include/fe/fe.h @@ -26,6 +26,7 @@ #include "libmesh/libmesh.h" // C++ includes +#include #include namespace libMesh @@ -1558,6 +1559,36 @@ OutputShape fe_fdm_deriv(const ElemType type, const Elem *, const unsigned int, const Point &)); +/** + * The scaling that gives the \p i'th one-dimensional HIERARCHIC bubble function unit \f$H^1\f$ + * seminorm on the reference interval, for \p i greater than one. + * + * The bubbles are \f$\xi^i - 1\f$ for even \p i and \f$\xi^i - \xi\f$ for odd \p i, up to this + * scaling. Integrating the square of their derivatives over \f$[-1,1]\f$ gives a seminorm of + * \f$\sqrt{2/(2i-1)}/(i-1)!\f$ in the even case and \f$(i-1)\sqrt{2/(2i-1)}/i!\f$ in the odd one, so + * the reciprocal of the seminorm cancels a factorial and what remains grows only as \f$\sqrt{i}\f$. + * + * The normalization matters because a shape function carrying \f$1/i!\f$ instead shrinks factorially + * with its order, and an operator assembled from such a basis inherits that spread on its diagonal. + * At order eight in two dimensions the smallest diagonal entry falls below the roundoff of the + * largest, which leaves the discretization numerically singular in double precision however it is + * solved. + * + * Only the bubbles are scaled. The two vertex functions are interpolatory, so their coefficients are + * values of the finite element solution at the vertices, and scaling them would change what a nodal + * boundary condition or a nodal output of a HIERARCHIC variable means. + */ +inline Real fe_hierarchic_bubble_scaling(const unsigned int i) +{ + libmesh_assert_greater(i, 1); + + // An even bubble differentiates to xi^(i-1)/(i-1)!, whose square integrates to 2/(2i-1) over the + // interval. The linear term an odd bubble carries turns the i^2 of that calculation into (i-1)^2. + const Real denominator = (i % 2) ? Real(i) - 1. : Real(i); + + return std::sqrt((2. * Real(i) - 1.) / 2.) / denominator; +} + template OutputShape diff --git a/src/fe/fe_hierarchic_shape_1D.C b/src/fe/fe_hierarchic_shape_1D.C index 06c607a80f4..293bf63c004 100644 --- a/src/fe/fe_hierarchic_shape_1D.C +++ b/src/fe/fe_hierarchic_shape_1D.C @@ -19,7 +19,6 @@ // Local includes #include "libmesh/fe.h" #include "libmesh/elem.h" -#include "libmesh/utility.h" // Anonymous namespace for functions shared by HIERARCHIC and @@ -438,58 +437,29 @@ Real fe_hierarchic_1D_shape(const ElemType, libmesh_error_msg_if (order <= 0, "HIERARCHIC FE families do not support p=0"); - // Declare that we are using our own special power function - // from the Utility namespace. This saves typing later. - using Utility::pow; - const Real xi = p(0); Real returnval = 1.; switch (i) { + // The vertex functions, left unscaled so that their coefficients remain the values of the + // finite element solution at the two vertices case 0: returnval = .5*(1. - xi); break; case 1: returnval = .5*(1. + xi); break; - // All even-terms have the same form. - // (xi^p - 1.)/p! - case 2: - returnval = (xi*xi - 1.)/2.; - break; - case 4: - returnval = (pow<4>(xi) - 1.)/24.; - break; - case 6: - returnval = (pow<6>(xi) - 1.)/720.; - break; - // All odd-terms have the same form. - // (xi^p - xi)/p! - case 3: - returnval = (xi*xi*xi - xi)/6.; - break; - case 5: - returnval = (pow<5>(xi) - xi)/120.; - break; - case 7: - returnval = (pow<7>(xi) - xi)/5040.; - break; + // The bubble functions, xi^p - 1 for even p and xi^p - xi for odd, each vanishing at both + // vertices and scaled to unit H1 seminorm over the interval default: - Real denominator = 1.; for (unsigned int n=1; n <= i; ++n) - { - returnval *= xi; - denominator *= n; - } - // Odd: - if (i % 2) - returnval = (returnval - xi)/denominator; - // Even: - else - returnval = (returnval - 1.)/denominator; + returnval *= xi; + + returnval = (returnval - ((i % 2) ? xi : 1.)) * + fe_hierarchic_bubble_scaling(i); break; } @@ -512,10 +482,6 @@ Real fe_hierarchic_1D_shape_deriv(const ElemType, libmesh_error_msg_if (order <= 0, "HIERARCHIC FE families do not support p=0"); - // Declare that we are using our own special power function - // from the Utility namespace. This saves typing later. - using Utility::pow; - const Real xi = p(0); Real returnval = 1.; @@ -528,41 +494,15 @@ Real fe_hierarchic_1D_shape_deriv(const ElemType, case 1: returnval = .5; break; - // All even-terms have the same form. - // xi^(p-1)/(p-1)! - case 2: - returnval = xi; - break; - case 4: - returnval = pow<3>(xi)/6.; - break; - case 6: - returnval = pow<5>(xi)/120.; - break; - // All odd-terms have the same form. - // (p*xi^(p-1) - 1.)/p! - case 3: - returnval = (3*xi*xi - 1.)/6.; - break; - case 5: - returnval = (5.*pow<4>(xi) - 1.)/120.; - break; - case 7: - returnval = (7.*pow<6>(xi) - 1.)/5040.; - break; + + // The bubbles differentiate to p xi^(p-1), less the one an odd bubble's linear term + // contributes, under the same scaling their shape functions carry default: - Real denominator = 1.; for (unsigned int n=1; n != i; ++n) - { - returnval *= xi; - denominator *= n; - } - // Odd: - if (i % 2) - returnval = (i * returnval - 1.)/denominator/i; - // Even: - else - returnval = returnval/denominator; + returnval *= xi; + + returnval = (Real(i) * returnval - ((i % 2) ? 1. : 0.)) * + fe_hierarchic_bubble_scaling(i); break; } @@ -587,10 +527,6 @@ Real fe_hierarchic_1D_shape_second_deriv(const ElemType, libmesh_error_msg_if (order <= 0, "HIERARCHIC FE families do not support p=0"); - // Declare that we are using our own special power function - // from the Utility namespace. This saves typing later. - using Utility::pow; - const Real xi = p(0); Real returnval = 1.; @@ -601,40 +537,15 @@ Real fe_hierarchic_1D_shape_second_deriv(const ElemType, case 1: returnval = 0; break; - // All terms have the same form. - // xi^(p-2)/(p-2)! - case 2: - returnval = 1; - break; - case 3: - returnval = xi; - break; - case 4: - returnval = pow<2>(xi)/2.; - break; - case 5: - returnval = pow<3>(xi)/6.; - break; - case 6: - returnval = pow<4>(xi)/24.; - break; - case 7: - returnval = pow<5>(xi)/120.; - break; + // Both parities differentiate twice to p (p-1) xi^(p-2), the linear term of an odd bubble + // dropping out, under the same scaling their shape functions carry default: - Real denominator = 1.; - for (unsigned int n=1; n != i; ++n) - { - returnval *= xi; - denominator *= n; - } - // Odd: - if (i % 2) - returnval = (i * returnval - 1.)/denominator/i; - // Even: - else - returnval = returnval/denominator; + for (unsigned int n=2; n != i; ++n) + returnval *= xi; + + returnval = Real(i) * (Real(i) - 1.) * returnval * + fe_hierarchic_bubble_scaling(i); break; } diff --git a/src/fe/fe_hierarchic_shape_2D.C b/src/fe/fe_hierarchic_shape_2D.C index acda640d4bb..27bb0863395 100644 --- a/src/fe/fe_hierarchic_shape_2D.C +++ b/src/fe/fe_hierarchic_shape_2D.C @@ -930,11 +930,10 @@ Real fe_triangle_helper (const Elem & elem, // FDM derivatives correctly! if (crossval == 0.) { - unsigned int basisfactorial = 1.; - for (unsigned int n=2; n <= basisorder; ++n) - basisfactorial *= n; - - return std::pow(edgenumerator, basisorder) / basisfactorial; + // The limit of the general expression below, in which only the bubble's leading term survives + // and so carries the same normalization the one-dimensional bubble does + return std::pow(edgenumerator, basisorder) * + fe_hierarchic_bubble_scaling(basisorder); } // Experimentally, as c -> 0, n propto c, I'm still seeing good // behavior from the default implementation below: diff --git a/src/fe/fe_hierarchic_shape_3D.C b/src/fe/fe_hierarchic_shape_3D.C index f986e3ec20c..041eb9f40f5 100644 --- a/src/fe/fe_hierarchic_shape_3D.C +++ b/src/fe/fe_hierarchic_shape_3D.C @@ -2404,11 +2404,10 @@ Real fe_hierarchic_3D_shape(const Elem * elem, if (crossval == 0.) // Yes, exact comparison; we seem numerically stable otherwise { - unsigned int basisfactorial = 1.; - for (unsigned int n=2; n <= basisorder; ++n) - basisfactorial *= n; - - return std::pow(edgenumerator, basisorder) / basisfactorial; + // The limit of the general expression below, in which only the bubble's leading term + // survives and so carries the same normalization the one-dimensional bubble does + return std::pow(edgenumerator, basisorder) * + fe_hierarchic_bubble_scaling(basisorder); } const Real edgeval = edgenumerator / crossval; From ebe2b5857c33a7bf35310d0ab027e15e4dab890d Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Fri, 11 Sep 2026 11:54:51 -0700 Subject: [PATCH 12/27] Expose the Dirichlet projection as a projection The coefficients a DirichletBoundary's projection determines were only ever reachable as a side effect: add the boundary, run create_dof_constraints(), read the constraint rows back, then remove the boundary and sweep again to undo the mutation. A caller that wants the coefficients rather than the constraints paid two sweeps, had to tell the rows it caused apart from the hanging-node and periodic rows already present, and mutated a DofMap that other readers share. DofMap::compute_dirichlet_values() returns them directly and constrains nothing. The projection itself is unchanged: it is the same ConstrainDirichlet over the same local element range, with a third AddConstraint implementation that records each prescribed value instead of writing a constraint row. A degree of freedom the DofMap already constrains is omitted, as AddPrimalConstraint omits it, so the values reported are those the constraint path would have added. AddConstraint no longer holds a DofMap: writing into one is a property of the two implementations that do it, not of disposing of a computed constraint, and the collecting implementation has no DofMap to write to. That leaves ConstrainDirichlet needing only a const DofMap, which is what lets the new method be const. A projected value is a coefficient in whatever basis is current, so this is how a caller obtains an essential boundary value that is correct on a modal basis such as HIERARCHIC above first order, where a degree of freedom at a node is a bubble coefficient rather than a point value of the solution. Co-Authored-By: Claude --- include/base/dof_map.h | 27 ++++++++++++ src/base/dof_map_constraints.C | 76 ++++++++++++++++++++++++++++++---- 2 files changed, 94 insertions(+), 9 deletions(-) diff --git a/include/base/dof_map.h b/include/base/dof_map.h index 566d3fcba6c..d2bc052465d 100644 --- a/include/base/dof_map.h +++ b/include/base/dof_map.h @@ -1070,6 +1070,33 @@ class DofMap : public DofMapBase, */ void create_dof_constraints (const MeshBase &, Real time=0); +#ifdef LIBMESH_ENABLE_DIRICHLET + /** + * Computes the value each \p DirichletBoundary in \p dirichlets prescribes for + * every degree of freedom it reaches, by the same local per-entity projection + * create_dof_constraints() uses, and stores those values in \p values keyed on + * global degree of freedom index. + * + * This constrains nothing: the DofMap is left exactly as it was found, so a + * caller that wants the projected coefficients themselves need not add a + * boundary, sweep, and remove it again. A projected value is a coefficient in + * whatever basis is current, which makes it meaningful on a modal basis as well + * as an interpolatory one. + * + * A degree of freedom this DofMap already constrains is omitted, exactly as + * create_dof_constraints() leaves such a degree of freedom to the constraint + * that already holds it. + * + * Only local degrees of freedom are computed, as in create_dof_constraints(). + * + * A time is specified for use with time-dependent Dirichlet functions. + */ + void compute_dirichlet_values (const DirichletBoundaries & dirichlets, + const MeshBase & mesh, + Real time, + DofConstraintValueMap & values) const; +#endif // LIBMESH_ENABLE_DIRICHLET + /** * Gathers constraint equation dependencies from other processors */ diff --git a/src/base/dof_map_constraints.C b/src/base/dof_map_constraints.C index 2a6c2d9d4dd..9a2d28f7288 100644 --- a/src/base/dof_map_constraints.C +++ b/src/base/dof_map_constraints.C @@ -198,15 +198,14 @@ private: #ifdef LIBMESH_ENABLE_DIRICHLET /** - * This functor class hierarchy adds a constraint row to a DofMap + * This functor class hierarchy disposes of a computed constraint. Writing it + * into a DofMap is one disposition; collecting the prescribed values without + * constraining anything is another, so the base holds no DofMap of its own. */ class AddConstraint { -protected: - DofMap & dof_map; - public: - AddConstraint(DofMap & dof_map_in) : dof_map(dof_map_in) {} + virtual ~AddConstraint() = default; virtual void operator()(dof_id_type dof_number, const DofConstraintRow & constraint_row, @@ -215,8 +214,11 @@ public: class AddPrimalConstraint : public AddConstraint { +private: + DofMap & dof_map; + public: - AddPrimalConstraint(DofMap & dof_map_in) : AddConstraint(dof_map_in) {} + AddPrimalConstraint(DofMap & dof_map_in) : dof_map(dof_map_in) {} virtual void operator()(dof_id_type dof_number, const DofConstraintRow & constraint_row, @@ -231,11 +233,12 @@ public: class AddAdjointConstraint : public AddConstraint { private: + DofMap & dof_map; const unsigned int qoi_index; public: AddAdjointConstraint(DofMap & dof_map_in, unsigned int qoi_index_in) - : AddConstraint(dof_map_in), qoi_index(qoi_index_in) {} + : dof_map(dof_map_in), qoi_index(qoi_index_in) {} virtual void operator()(dof_id_type dof_number, const DofConstraintRow & constraint_row, @@ -247,6 +250,32 @@ public: } }; +/** + * Records the prescribed value of each degree of freedom a Dirichlet projection + * determines, leaving the DofMap untouched. A degree of freedom the DofMap + * already constrains is skipped, as AddPrimalConstraint skips it, so that the + * values collected are those the constraint path would have added. + */ +class CollectDirichletValues : public AddConstraint +{ +private: + const DofMap & dof_map; + DofConstraintValueMap & values; + +public: + CollectDirichletValues(const DofMap & dof_map_in, + DofConstraintValueMap & values_in) + : dof_map(dof_map_in), values(values_in) {} + + virtual void operator()(dof_id_type dof_number, + const DofConstraintRow & /*constraint_row*/, + const Number constraint_rhs) const + { + if (!dof_map.is_constrained_dof(dof_number)) + values[dof_number] = constraint_rhs; + } +}; + /** @@ -257,7 +286,7 @@ public: class ConstrainDirichlet { private: - DofMap & dof_map; + const DofMap & dof_map; const MeshBase & mesh; const Real time; const DirichletBoundaries & dirichlets; @@ -1544,7 +1573,7 @@ private: } // apply_dirichlet_impl public: - ConstrainDirichlet (DofMap & dof_map_in, + ConstrainDirichlet (const DofMap & dof_map_in, const MeshBase & mesh_in, const Real time_in, const DirichletBoundaries & dirichlets_in, @@ -1895,6 +1924,35 @@ void DofMap::create_dof_constraints(const MeshBase & mesh, Real time) +#ifdef LIBMESH_ENABLE_DIRICHLET +void DofMap::compute_dirichlet_values(const DirichletBoundaries & dirichlets, + const MeshBase & mesh, + const Real time, + DofConstraintValueMap & values) const +{ + parallel_object_only(); + + values.clear(); + + if (dirichlets.empty()) + return; + + if (_verify_dirichlet_bc_consistency) + for (const auto & dirichlet : dirichlets) + this->check_dirichlet_bcid_consistency(mesh, *dirichlet); + + // Processors only project their local elements, as the constraint path does + ConstElemRange range (mesh.local_elements_begin(), + mesh.local_elements_end()); + + Threads::parallel_for + (range, ConstrainDirichlet(*this, mesh, time, dirichlets, + CollectDirichletValues(*this, values))); +} +#endif // LIBMESH_ENABLE_DIRICHLET + + + void DofMap::process_mesh_constraint_rows(const MeshBase & mesh) { // If we already have simple Dirichlet constraints (with right hand From c021cd19e74ff342165986047cf47413f7514342 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Mon, 14 Sep 2026 15:46:37 -0600 Subject: [PATCH 13/27] Add interface for indicating a non-reproducible residual --- include/solvers/petsc_nonlinear_solver.h | 27 ++++++++++++++++++++++++ src/solvers/petsc_nonlinear_solver.C | 10 +++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/include/solvers/petsc_nonlinear_solver.h b/include/solvers/petsc_nonlinear_solver.h index a478b3c7c1f..d0e1f79d577 100644 --- a/include/solvers/petsc_nonlinear_solver.h +++ b/include/solvers/petsc_nonlinear_solver.h @@ -183,6 +183,27 @@ class PetscNonlinearSolver : public NonlinearSolver */ bool snes_mf_reuse_base() const { return _snesmf_reuse_base; } + /** + * Set whether evaluating the residual twice at the same solution yields bitwise identical + * results. The debug-mode check that reusing the nonlinear residual as the matrix-free base + * vector was safe compares the recomputed base residual against the stored one bitwise, so it + * says something only when assembly sums each degree of freedom's contributions in a fixed + * order. MPI-parallel and threaded assembly do not, and are already excluded from that check; + * an application that performs its own parallel assembly, for instance accumulating with + * device atomics whose completion order is not reproducible, has to report that itself. + * + * Setting this to false disables only that check. It does not change what is computed, and in + * particular does not stop the base vector from being reused; where the difference between two + * evaluations is at the level of round-off, reusing it remains sound. + */ + void set_reproducible_residual(bool state) { _reproducible_residual = state; } + + /** + * @return Whether evaluating the residual twice at the same solution yields bitwise identical + * results + */ + bool reproducible_residual() const { return _reproducible_residual; } + /** * Set whether we are computing the base vector for matrix-free finite-differencing */ @@ -280,6 +301,12 @@ class PetscNonlinearSolver : public NonlinearSolver */ bool _snesmf_reuse_base; + /** + * True if two residual evaluations at the same solution agree bitwise, which is what makes the + * debug-mode base vector reuse check meaningful. See set_reproducible_residual() + */ + bool _reproducible_residual; + void build_mat_null_space(NonlinearImplicitSystem::ComputeVectorSubspace * computeSubspaceObject, void (*)(std::vector *> &, sys_type &), MatNullSpace *); diff --git a/src/solvers/petsc_nonlinear_solver.C b/src/solvers/petsc_nonlinear_solver.C index b965eca70ef..d23ce97239d 100644 --- a/src/solvers/petsc_nonlinear_solver.C +++ b/src/solvers/petsc_nonlinear_solver.C @@ -336,8 +336,13 @@ extern "C" #ifndef NDEBUG // When the user requested to reuse the nonlinear residual as the base for doing matrix-free - // approximation of the Jacobian, we'll do a sanity check to make sure that that was safe to do - if (solver->snes_mf_reuse_base() && (solver->comm().size() == 1) && (libMesh::n_threads() == 1)) + // approximation of the Jacobian, we'll do a sanity check to make sure that that was safe to do. + // The comparison below is bitwise, so it only says something when each degree of freedom's + // contributions are summed in a fixed order: MPI-parallel and threaded assembly are excluded + // here for that reason, and an application assembling in parallel by some means libMesh cannot + // see reports that through set_reproducible_residual() + if (solver->snes_mf_reuse_base() && solver->reproducible_residual() && + (solver->comm().size() == 1) && (libMesh::n_threads() == 1)) { SNES snes = solver->snes(); @@ -697,6 +702,7 @@ PetscNonlinearSolver::PetscNonlinearSolver (sys_type & system_in) : _zero_out_jacobian(true), _default_monitor(true), _snesmf_reuse_base(true), + _reproducible_residual(true), _computing_base_vector(true), _setup_reuse(false) { From 4482023209ea23191fcb93e08354cfb6907ee9ed Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Fri, 18 Sep 2026 17:11:52 -0600 Subject: [PATCH 14/27] Add LOG_SCOPE_NO_NVTX for events that fire per mesh entity PerfLog::fast_push() opens an NVTX range for every performance log event. Events that fire once per mesh entity or more often therefore dominate an Nsight Systems capture with sub-microsecond ranges. In a p-multigrid profile of a 4x4 QUAD9 mesh refined seven times, five such scopes accounted for 4.23 million of the 4.26 million NVTX ranges recorded, led by MeshRefinement::add_node() at 3.15 million. Recording them costs time, and because they are always the innermost open range, they also displace the coarse ranges that make an enclosing-range attribution useful. Thread an nvtx_range flag through fast_push(), fast_pop() and PerfItem, and add a LOG_SCOPE_NO_NVTX macro that clears it, so an event stays timed in the performance log while staying out of the NVTX stream. Apply it to the scopes whose call counts scale with the mesh: MeshRefinement::add_node(), FEMap::compute_affine_map(), FEMap::inverse_map(), InfFEMap::inverse_map(), DefaultCoupling::operator(), and the FE, FEXYZ and InfFE compute_shape_functions() variants. The same capture now records 28987 NVTX ranges, and the perf log still reports every one of these events. Co-Authored-By: Claude --- include/base/libmesh_logging.h | 21 +++++++++++++++---- include/utils/perf_log.h | 36 +++++++++++++++++++++++++++------ src/fe/fe_base.C | 2 +- src/fe/fe_map.C | 4 ++-- src/fe/fe_xyz.C | 2 +- src/fe/inf_fe.C | 2 +- src/fe/inf_fe_map.C | 2 +- src/ghosting/default_coupling.C | 2 +- src/mesh/mesh_refinement.C | 2 +- 9 files changed, 55 insertions(+), 18 deletions(-) diff --git a/include/base/libmesh_logging.h b/include/base/libmesh_logging.h index 8b0257cef78..424781dd74e 100644 --- a/include/base/libmesh_logging.h +++ b/include/base/libmesh_logging.h @@ -66,20 +66,22 @@ struct PerfItem PerfItem(const char * label, const char * header, bool enabled=true, - PerfLog * my_perflog=&perflog) : + PerfLog * my_perflog=&perflog, + bool nvtx_range=true) : _label(label), _header(header), _enabled(enabled), - _perflog(*my_perflog) + _perflog(*my_perflog), + _nvtx_range(nvtx_range) { if (_enabled) - _perflog.fast_push(label, header); + _perflog.fast_push(label, header, _nvtx_range); } ~PerfItem() { if (_enabled) - _perflog.fast_pop(_label, _header); + _perflog.fast_pop(_label, _header, _nvtx_range); } private: @@ -87,6 +89,12 @@ struct PerfItem const char * _header; bool _enabled; PerfLog & _perflog; + + /** + * Whether to open an NVTX range alongside the performance log event; see + * PerfLog::fast_push(). + */ + bool _nvtx_range; }; @@ -106,6 +114,10 @@ struct PerfItem # define LOG_SCOPE(a,b) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b); # define LOG_SCOPE_IF(a,b,enabled) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b,enabled); # define LOG_SCOPE_WITH(a,b,logger) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b,true,&logger); +// Times the event in the performance log while leaving it out of any NVTX +// capture. Use for events that fire once per mesh entity or more often; see +// PerfLog::fast_push(). +# define LOG_SCOPE_NO_NVTX(a,b) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b,true,&libMesh::perflog,false); #else @@ -116,6 +128,7 @@ struct PerfItem # define LOG_SCOPE(a,b) {} # define LOG_SCOPE_IF(a,b,enabled) {} # define LOG_SCOPE_WITH(a,b,logger) {} +# define LOG_SCOPE_NO_NVTX(a,b) {} #endif diff --git a/include/utils/perf_log.h b/include/utils/perf_log.h index ad961fe0f5a..efe7b6c66ac 100644 --- a/include/utils/perf_log.h +++ b/include/utils/perf_log.h @@ -216,9 +216,17 @@ class PerfLog * here. Supply pointers to string literals or other character * arrays whose lifetime will exceed the lifetime of the PerfLog * object, not to temporarily allocated arrays. + * + * When the library is built with NVTX support, \p nvtx_range also opens an + * NVTX range for the event. Supply \p false for events that fire once per + * mesh entity or more often: such events produce millions of + * sub-microsecond NVTX ranges in a profiler capture, which costs time to + * record and buries the coarse ranges a capture is usually taken to + * measure. Those events are still timed in the performance log. */ void fast_push (const char * label, - const char * header=""); + const char * header="", + bool nvtx_range=true); /** * Push the event \p label onto the stack, pausing any active event. @@ -249,9 +257,13 @@ class PerfLog * to fast_push, not merely pointers to identical strings. * This method is called from the PerfItem destructor, so it should * not throw. We have therefore marked it noexcept as a reminder. + * + * \p nvtx_range must match the value supplied to the corresponding + * fast_push(), so that the NVTX range stack stays balanced. */ void fast_pop (const char * label, - const char * header="") noexcept; + const char * header="", + bool nvtx_range=true) noexcept; /** * Pop the event \p label off the stack, resuming any lower event. @@ -500,8 +512,13 @@ double PerfData::stopit () // PerfLog class inline member functions inline void PerfLog::fast_push (const char * label, - const char * header) + const char * header, + bool nvtx_range) { +#ifndef LIBMESH_HAVE_NVTX_API + libmesh_ignore(nvtx_range); +#endif + if (this->log_events) { // The global perflog stack may not be thread-safe, but if we're @@ -528,7 +545,8 @@ void PerfLog::fast_push (const char * label, // time allocating a new string on every push, so for now we'll // drop the header. Maybe we should allocate a new string in // the PerfData? - nvtxRangePushA(label); + if (nvtx_range) + nvtxRangePushA(label); #endif } } @@ -537,8 +555,13 @@ void PerfLog::fast_push (const char * label, inline void PerfLog::fast_pop(const char * libmesh_dbg_var(label), - const char * libmesh_dbg_var(header)) noexcept + const char * libmesh_dbg_var(header), + bool nvtx_range) noexcept { +#ifndef LIBMESH_HAVE_NVTX_API + libmesh_ignore(nvtx_range); +#endif + if (this->log_events) { // The global perflog stack may not be thread-safe, but if we're @@ -551,7 +574,8 @@ void PerfLog::fast_pop(const char * libmesh_dbg_var(label), #endif #ifdef LIBMESH_HAVE_NVTX_API - nvtxRangePop(); + if (nvtx_range) + nvtxRangePop(); #endif // If there's nothing on the stack, then we can't pop anything. Previously we // asserted that the log_stack was not empty, but we should not throw from diff --git a/src/fe/fe_base.C b/src/fe/fe_base.C index bea9ef46596..9411288c8c2 100644 --- a/src/fe/fe_base.C +++ b/src/fe/fe_base.C @@ -768,7 +768,7 @@ void FEGenericBase::compute_shape_functions (const Elem * elem, // have already been computed via init_shape_functions // Start logging the shape function computation - LOG_SCOPE("compute_shape_functions()", "FE"); + LOG_SCOPE_NO_NVTX("compute_shape_functions()", "FE"); this->determine_calculations(); diff --git a/src/fe/fe_map.C b/src/fe/fe_map.C index 06cad48dfe3..fe6c20b27c4 100644 --- a/src/fe/fe_map.C +++ b/src/fe/fe_map.C @@ -1169,7 +1169,7 @@ void FEMap::compute_affine_map(const unsigned int dim, const Elem * elem) { // Start logging the map computation. - LOG_SCOPE("compute_affine_map()", "FEMap"); + LOG_SCOPE_NO_NVTX("compute_affine_map()", "FEMap"); libmesh_assert(elem); @@ -1533,7 +1533,7 @@ Point FEMap::inverse_map (const unsigned int dim, #endif // Start logging the map inversion. - LOG_SCOPE("inverse_map()", "FEMap"); + LOG_SCOPE_NO_NVTX("inverse_map()", "FEMap"); // How much did the point on the reference // element change by in this Newton step? diff --git a/src/fe/fe_xyz.C b/src/fe/fe_xyz.C index 60c9e9a2e8a..c81ae6f18ed 100644 --- a/src/fe/fe_xyz.C +++ b/src/fe/fe_xyz.C @@ -213,7 +213,7 @@ void FEXYZ::compute_shape_functions (const Elem * elem, // have already been computed via init_shape_functions // Start logging the shape function computation - LOG_SCOPE("compute_shape_functions()", "FE"); + LOG_SCOPE_NO_NVTX("compute_shape_functions()", "FE"); const std::vector & xyz_qp = this->get_xyz(); diff --git a/src/fe/inf_fe.C b/src/fe/inf_fe.C index 581f88dd262..72c7f9af6f7 100644 --- a/src/fe/inf_fe.C +++ b/src/fe/inf_fe.C @@ -762,7 +762,7 @@ void InfFE::compute_shape_functions(const Elem * inf_elem, InfFEBase::get_elem_type(inf_elem->type())); // Start logging the overall computation of shape functions - LOG_SCOPE("compute_shape_functions()", "InfFE"); + LOG_SCOPE_NO_NVTX("compute_shape_functions()", "InfFE"); //const unsigned int n_radial_qp = cast_int(som.size()); //const unsigned int n_base_qp = cast_int(S_map[0].size()); diff --git a/src/fe/inf_fe_map.C b/src/fe/inf_fe_map.C index 8c6637191a0..0e310517a0e 100644 --- a/src/fe/inf_fe_map.C +++ b/src/fe/inf_fe_map.C @@ -104,7 +104,7 @@ Point InfFEMap::inverse_map (const unsigned int dim, libmesh_assert(dim > 0); // Start logging the map inversion. - LOG_SCOPE("inverse_map()", "InfFEMap"); + LOG_SCOPE_NO_NVTX("inverse_map()", "InfFEMap"); // The strategy is: // compute the intersection of the line diff --git a/src/ghosting/default_coupling.C b/src/ghosting/default_coupling.C index 201ce603330..9facdfa2cee 100644 --- a/src/ghosting/default_coupling.C +++ b/src/ghosting/default_coupling.C @@ -76,7 +76,7 @@ void DefaultCoupling::operator() processor_id_type p, map_type & coupled_elements) { - LOG_SCOPE("operator()", "DefaultCoupling"); + LOG_SCOPE_NO_NVTX("operator()", "DefaultCoupling"); // Let us not do assertion at this moment for API upgrade. // There is a functor inside of ElementSideNeighborLayers. diff --git a/src/mesh/mesh_refinement.C b/src/mesh/mesh_refinement.C index 40f670246fc..19056472d58 100644 --- a/src/mesh/mesh_refinement.C +++ b/src/mesh/mesh_refinement.C @@ -143,7 +143,7 @@ Node * MeshRefinement::add_node(Elem & parent, unsigned int node, processor_id_type proc_id) { - LOG_SCOPE("add_node()", "MeshRefinement"); + LOG_SCOPE_NO_NVTX("add_node()", "MeshRefinement"); unsigned int parent_n = parent.as_parent_node(child, node); From 9cde942a9d3dd8aa90279c4e6cd0c3f3a76d189b Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Mon, 21 Sep 2026 16:16:35 -0600 Subject: [PATCH 15/27] Expose the hierarchic quadrilateral tensor-product index map A HIERARCHIC or L2_HIERARCHIC shape function on a quadrilateral is a product of one-dimensional shape functions of the same total order, one per reference coordinate, times a sign that keeps an odd edge mode continuous across an edge two elements traverse in opposite directions. Both the shape function and its derivative already compute themselves that way, from a helper private to the translation unit, so the factorization was unavailable to a consumer wanting to contract against the one-dimensional tables rather than the two-dimensional ones. The helper becomes fe_hierarchic_quad_tensor_indices, declared alongside the other finite element helpers in fe.h and returning the mode pair and the sign. No shape function evaluation changes. Co-Authored-By: Claude --- include/fe/fe.h | 22 ++++++++++++++++++++++ src/fe/fe_hierarchic_shape_2D.C | 23 +++++++++++------------ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/include/fe/fe.h b/include/fe/fe.h index 4be2b29fd30..36cc832925b 100644 --- a/include/fe/fe.h +++ b/include/fe/fe.h @@ -28,6 +28,7 @@ // C++ includes #include #include +#include namespace libMesh { @@ -1559,6 +1560,27 @@ OutputShape fe_fdm_deriv(const ElemType type, const Elem *, const unsigned int, const Point &)); +/** + * The one-dimensional mode indices and sign whose product forms the \p i'th HIERARCHIC or + * L2_HIERARCHIC shape function of total order \p totalorder on a quadrilateral. + * + * A quadrilateral of these families carries a tensor-product basis, so + * \f$\phi_i(\xi,\eta) = f_i L_{i_0}(\xi) L_{i_1}(\eta)\f$ with \f$L\f$ the one-dimensional + * shape functions of the same family and total order on \p EDGE3, and + * \f$\nabla\phi_i = f_i (L'_{i_0} L_{i_1}, L_{i_0} L'_{i_1})\f$. The sign \f$f_i = \pm 1\f$ + * keeps an odd edge mode continuous across an edge that this element and its neighbor traverse in + * opposite directions, and so depends on the element's edge orientations. + * + * Exposing the factorization lets a consumer contract against the one-dimensional tables rather + * than the two-dimensional ones, which is what sum factorization needs. + * + * \returns The pair \f$(i_0, i_1)\f$ and the sign \f$f_i\f$. + */ +std::tuple +fe_hierarchic_quad_tensor_indices (const Elem * elem, + const unsigned int totalorder, + const unsigned int i); + /** * The scaling that gives the \p i'th one-dimensional HIERARCHIC bubble function unit \f$H^1\f$ * seminorm on the reference interval, for \p i greater than one. diff --git a/src/fe/fe_hierarchic_shape_2D.C b/src/fe/fe_hierarchic_shape_2D.C index 27bb0863395..216b40ef6ea 100644 --- a/src/fe/fe_hierarchic_shape_2D.C +++ b/src/fe/fe_hierarchic_shape_2D.C @@ -63,11 +63,17 @@ Real fe_hierarchic_2D_shape_second_deriv(const Elem * elem, #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES +} // anonymous namespace + + + +namespace libMesh +{ std::tuple -quad_indices(const Elem * elem, - const unsigned int totalorder, - const unsigned int i) +fe_hierarchic_quad_tensor_indices(const Elem * elem, + const unsigned int totalorder, + const unsigned int i) { libmesh_assert_less (i, (totalorder+1u)*(totalorder+1u)); @@ -120,13 +126,6 @@ quad_indices(const Elem * elem, return {i0, i1, f}; } -} // anonymous namespace - - - -namespace libMesh -{ - LIBMESH_DEFAULT_VECTORIZED_FE(2,HIERARCHIC) LIBMESH_DEFAULT_VECTORIZED_FE(2,L2_HIERARCHIC) @@ -1040,7 +1039,7 @@ Real fe_hierarchic_2D_shape(const Elem * elem, case QUADSHELL9: { // Compute quad shape functions as a tensor-product - auto [i0, i1, f] = quad_indices(elem, totalorder, i); + auto [i0, i1, f] = fe_hierarchic_quad_tensor_indices(elem, totalorder, i); return f*(FE<1,T>::shape(EDGE3, totalorder, i0, p(0))* FE<1,T>::shape(EDGE3, totalorder, i1, p(1))); @@ -1091,7 +1090,7 @@ Real fe_hierarchic_2D_shape_deriv(const Elem * elem, case QUADSHELL9: { // Compute quad shape functions as a tensor-product - auto [i0, i1, f] = quad_indices(elem, totalorder, i); + auto [i0, i1, f] = fe_hierarchic_quad_tensor_indices(elem, totalorder, i); switch (j) { From f8085f6264b73e0060b8bf6577df0f5179f7f4ee Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Mon, 14 Sep 2026 17:03:42 -0700 Subject: [PATCH 16/27] Correct the seminorm in the bubble scaling comment fe_hierarchic_bubble_scaling documented the seminorm of the bubbles as sqrt(2/(2i-1))/(i-1)! for even i, which is the seminorm of the (xi^i - 1)/i! that the bubbles carried before they were normalized, not of the xi^i - 1 the same comment says they are now. The bubbles integrate to i sqrt(2/(2i-1)) and (i-1) sqrt(2/(2i-1)), and the scaling this function returns is the reciprocal of that, as the code already was. Co-Authored-By: Claude --- include/fe/fe.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/fe/fe.h b/include/fe/fe.h index 36cc832925b..904b398ad9b 100644 --- a/include/fe/fe.h +++ b/include/fe/fe.h @@ -1587,8 +1587,8 @@ fe_hierarchic_quad_tensor_indices (const Elem * elem, * * The bubbles are \f$\xi^i - 1\f$ for even \p i and \f$\xi^i - \xi\f$ for odd \p i, up to this * scaling. Integrating the square of their derivatives over \f$[-1,1]\f$ gives a seminorm of - * \f$\sqrt{2/(2i-1)}/(i-1)!\f$ in the even case and \f$(i-1)\sqrt{2/(2i-1)}/i!\f$ in the odd one, so - * the reciprocal of the seminorm cancels a factorial and what remains grows only as \f$\sqrt{i}\f$. + * \f$i\sqrt{2/(2i-1)}\f$ in the even case and \f$(i-1)\sqrt{2/(2i-1)}\f$ in the odd one, and this + * scaling is the reciprocal of that, which grows as \f$\sqrt{i}\f$. * * The normalization matters because a shape function carrying \f$1/i!\f$ instead shrinks factorially * with its order, and an operator assembled from such a basis inherits that spread on its diagonal. @@ -1604,8 +1604,8 @@ inline Real fe_hierarchic_bubble_scaling(const unsigned int i) { libmesh_assert_greater(i, 1); - // An even bubble differentiates to xi^(i-1)/(i-1)!, whose square integrates to 2/(2i-1) over the - // interval. The linear term an odd bubble carries turns the i^2 of that calculation into (i-1)^2. + // An even bubble differentiates to i xi^(i-1), whose square integrates to 2 i^2/(2i-1) over the + // interval. The linear term an odd bubble carries turns that i^2 into (i-1)^2. const Real denominator = (i % 2) ? Real(i) - 1. : Real(i); return std::sqrt((2. * Real(i) - 1.) / 2.) / denominator; From 0e6f4b205f3658ee47aad884e56b15bc19745098 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Mon, 14 Sep 2026 17:03:51 -0700 Subject: [PATCH 17/27] Share the Gauss-Lobatto points with the bases collocated on them A nodal basis whose interpolation points are the points of a quadrature rule is collocated with it: each shape function is one at its own point and zero at the others, so the mass matrix that rule assembles is diagonal, for any mapping and any element shape. That property is exact only while the basis and the rule carry the same values, so a basis that computed its own points would leave the mass matrix diagonal to roundoff rather than exactly, and any lumping that relied on it would be approximate. The table of one-dimensional points and weights is therefore reachable on its own, as QGaussLobatto::points_1D and weights_1D, keyed by the number of points rather than by the order of the rule it realizes. The two indices differ: a rule of n points is exact through degree 2n-3, so the orders 2n-4 and 2n-3 share a rule, which is why the cases of the table come in pairs and which n_points_1D inverts. A basis of degree p reads the p+1 point rule. The table's values are untouched. init_1D now copies from it, and every rule it holds is built once on first use so that reaching one needs no lock. Co-Authored-By: Claude --- include/quadrature/quadrature_gauss_lobatto.h | 30 + src/quadrature/quadrature_gauss_lobatto_1D.C | 1351 +++++++++-------- 2 files changed, 746 insertions(+), 635 deletions(-) diff --git a/include/quadrature/quadrature_gauss_lobatto.h b/include/quadrature/quadrature_gauss_lobatto.h index 4bfea4d618d..fae6addfb57 100644 --- a/include/quadrature/quadrature_gauss_lobatto.h +++ b/include/quadrature/quadrature_gauss_lobatto.h @@ -58,6 +58,36 @@ class QGaussLobatto final : public QBase QGaussLobatto & operator= (QGaussLobatto &&) = default; virtual ~QGaussLobatto() = default; + /** + * The largest number of points for which the one-dimensional rule is tabulated. + */ + static constexpr unsigned int max_points_1D = 23; + + /** + * \returns The number of one-dimensional points that the rule of order \p order uses. + * + * A rule of n points is exact through degree 2n-3, so the orders 2n-4 and 2n-3 share a + * rule and this inverts that pairing. + */ + static unsigned int n_points_1D (const Order order); + + /** + * \returns The \p n one-dimensional Gauss-Lobatto points on the reference interval + * [-1,1], in ascending order. + * + * A nodal basis whose interpolation points are the points of this rule is collocated + * with it, which makes its mass matrix diagonal. That property is exact only if the + * basis and the rule carry the same values, so a basis reads its points from here + * rather than computing its own. + */ + static const std::vector & points_1D (const unsigned int n); + + /** + * \returns The \p n one-dimensional Gauss-Lobatto weights, ordered to match + * \p points_1D. + */ + static const std::vector & weights_1D (const unsigned int n); + /** * \returns \p QGAUSS_LOBATTO. */ diff --git a/src/quadrature/quadrature_gauss_lobatto_1D.C b/src/quadrature/quadrature_gauss_lobatto_1D.C index edeb4241b0c..2a2ce3f4757 100644 --- a/src/quadrature/quadrature_gauss_lobatto_1D.C +++ b/src/quadrature/quadrature_gauss_lobatto_1D.C @@ -18,18 +18,30 @@ // C++ includes +#include +#include // Local includes +#include "libmesh/int_range.h" #include "libmesh/quadrature_gauss_lobatto.h" namespace libMesh { -void QGaussLobatto::init_1D() +namespace { + +/** + * Fills \p pts and \p wts with the Gauss-Lobatto points and weights of the rule of order + * \p order on the reference interval [-1,1], the points in ascending order. + * + * A rule of n points is exact through degree 2n-3, so the two orders 2n-4 and 2n-3 share + * a rule, which is why the cases below come in pairs. + */ +void fill_1D(const Order order, + std::vector & pts, + std::vector & wts) { - //---------------------------------------------------------------------- - // 1D quadrature rules - switch(get_order()) + switch(order) { // Since Gauss-Lobatto rules must include the endpoints of the // domain, there is no 1-point rule. The two-point @@ -37,14 +49,14 @@ void QGaussLobatto::init_1D() case CONSTANT: case FIRST: { - _points.resize (2); - _weights.resize(2); + pts.resize (2); + wts.resize(2); - _points[0](0) = -1; - _points[1] = -_points[0]; + pts[0] = -1; + pts[1] = -pts[0]; - _weights[0] = 1.; - _weights[1] = _weights[0]; + wts[0] = 1.; + wts[1] = wts[0]; return; } @@ -54,16 +66,16 @@ void QGaussLobatto::init_1D() case SECOND: case THIRD: { - _points.resize (3); - _weights.resize(3); + pts.resize (3); + wts.resize(3); - _points[0](0) = -1; - _points[1] = 0; - _points[2] = -_points[0]; + pts[0] = -1; + pts[1] = 0; + pts[2] = -pts[0]; - _weights[0] = Real(1)/3; - _weights[1] = Real(4)/3; - _weights[2] = _weights[0]; + wts[0] = Real(1)/3; + wts[1] = Real(4)/3; + wts[2] = wts[0]; return; } @@ -72,18 +84,18 @@ void QGaussLobatto::init_1D() case FOURTH: case FIFTH: { - _points.resize (4); - _weights.resize(4); + pts.resize (4); + wts.resize(4); - _points[ 0](0) = -1; - _points[ 1](0) = -std::sqrt(Real(1)/5); // ~ -0.4472135955 - _points[ 2] = -_points[1]; - _points[ 3] = -_points[0]; + pts[ 0] = -1; + pts[ 1] = -std::sqrt(Real(1)/5); // ~ -0.4472135955 + pts[ 2] = -pts[1]; + pts[ 3] = -pts[0]; - _weights[ 0] = Real(1)/6; - _weights[ 1] = Real(5)/6; - _weights[ 2] = _weights[1]; - _weights[ 3] = _weights[0]; + wts[ 0] = Real(1)/6; + wts[ 1] = Real(5)/6; + wts[ 2] = wts[1]; + wts[ 3] = wts[0]; return; } @@ -93,20 +105,20 @@ void QGaussLobatto::init_1D() case SIXTH: case SEVENTH: { - _points.resize (5); - _weights.resize(5); + pts.resize (5); + wts.resize(5); - _points[ 0](0) = -1; - _points[ 1](0) = -std::sqrt(Real(3)/7); // ~ -0.6546536707 - _points[ 2](0) = 0.; - _points[ 3] = -_points[1]; - _points[ 4] = -_points[0]; + pts[ 0] = -1; + pts[ 1] = -std::sqrt(Real(3)/7); // ~ -0.6546536707 + pts[ 2] = 0.; + pts[ 3] = -pts[1]; + pts[ 4] = -pts[0]; - _weights[ 0] = 1/Real(10); - _weights[ 1] = Real(49)/90; - _weights[ 2] = Real(32)/45; - _weights[ 3] = _weights[1]; - _weights[ 4] = _weights[0]; + wts[ 0] = 1/Real(10); + wts[ 1] = Real(49)/90; + wts[ 2] = Real(32)/45; + wts[ 3] = wts[1]; + wts[ 4] = wts[0]; return; } @@ -115,22 +127,22 @@ void QGaussLobatto::init_1D() case EIGHTH: case NINTH: { - _points.resize (6); - _weights.resize(6); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -7.6505532392946469285100297395934e-01_R; - _points[ 2](0) = -2.8523151648064509631415099404088e-01_R; - _points[ 3] = -_points[2]; - _points[ 4] = -_points[1]; - _points[ 5] = -_points[0]; - - _weights[ 0] = 6.6666666666666666666666666666667e-02_R; - _weights[ 1] = 3.7847495629784698031661280821202e-01_R; - _weights[ 2] = 5.5485837703548635301672052512131e-01_R; - _weights[ 3] = _weights[2]; - _weights[ 4] = _weights[1]; - _weights[ 5] = _weights[0]; + pts.resize (6); + wts.resize(6); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -7.6505532392946469285100297395934e-01_R; + pts[ 2] = -2.8523151648064509631415099404088e-01_R; + pts[ 3] = -pts[2]; + pts[ 4] = -pts[1]; + pts[ 5] = -pts[0]; + + wts[ 0] = 6.6666666666666666666666666666667e-02_R; + wts[ 1] = 3.7847495629784698031661280821202e-01_R; + wts[ 2] = 5.5485837703548635301672052512131e-01_R; + wts[ 3] = wts[2]; + wts[ 4] = wts[1]; + wts[ 5] = wts[0]; return; } @@ -139,24 +151,24 @@ void QGaussLobatto::init_1D() case TENTH: case ELEVENTH: { - _points.resize (7); - _weights.resize(7); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -8.3022389627856692987203221396747e-01_R; - _points[ 2](0) = -4.6884879347071421380377188190877e-01_R; - _points[ 3](0) = 0.; - _points[ 4] = -_points[2]; - _points[ 5] = -_points[1]; - _points[ 6] = -_points[0]; - - _weights[ 0] = 4.7619047619047619047619047619048e-02_R; - _weights[ 1] = 2.7682604736156594801070040629007e-01_R; - _weights[ 2] = 4.3174538120986262341787102228136e-01_R; - _weights[ 3] = 4.8761904761904761904761904761905e-01_R; - _weights[ 4] = _weights[2]; - _weights[ 5] = _weights[1]; - _weights[ 6] = _weights[0]; + pts.resize (7); + wts.resize(7); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -8.3022389627856692987203221396747e-01_R; + pts[ 2] = -4.6884879347071421380377188190877e-01_R; + pts[ 3] = 0.; + pts[ 4] = -pts[2]; + pts[ 5] = -pts[1]; + pts[ 6] = -pts[0]; + + wts[ 0] = 4.7619047619047619047619047619048e-02_R; + wts[ 1] = 2.7682604736156594801070040629007e-01_R; + wts[ 2] = 4.3174538120986262341787102228136e-01_R; + wts[ 3] = 4.8761904761904761904761904761905e-01_R; + wts[ 4] = wts[2]; + wts[ 5] = wts[1]; + wts[ 6] = wts[0]; return; } @@ -165,26 +177,26 @@ void QGaussLobatto::init_1D() case TWELFTH: case THIRTEENTH: { - _points.resize (8); - _weights.resize(8); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -8.7174014850960661533744576122066e-01_R; - _points[ 2](0) = -5.9170018143314230214451073139795e-01_R; - _points[ 3](0) = -2.0929921790247886876865726034535e-01_R; - _points[ 4] = -_points[3]; - _points[ 5] = -_points[2]; - _points[ 6] = -_points[1]; - _points[ 7] = -_points[0]; - - _weights[ 0] = 3.5714285714285714285714285714286e-02_R; - _weights[ 1] = 2.1070422714350603938299206577576e-01_R; - _weights[ 2] = 3.4112269248350436476424067710775e-01_R; - _weights[ 3] = 4.1245879465870388156705297140221e-01_R; - _weights[ 4] = _weights[3]; - _weights[ 5] = _weights[2]; - _weights[ 6] = _weights[1]; - _weights[ 7] = _weights[0]; + pts.resize (8); + wts.resize(8); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -8.7174014850960661533744576122066e-01_R; + pts[ 2] = -5.9170018143314230214451073139795e-01_R; + pts[ 3] = -2.0929921790247886876865726034535e-01_R; + pts[ 4] = -pts[3]; + pts[ 5] = -pts[2]; + pts[ 6] = -pts[1]; + pts[ 7] = -pts[0]; + + wts[ 0] = 3.5714285714285714285714285714286e-02_R; + wts[ 1] = 2.1070422714350603938299206577576e-01_R; + wts[ 2] = 3.4112269248350436476424067710775e-01_R; + wts[ 3] = 4.1245879465870388156705297140221e-01_R; + wts[ 4] = wts[3]; + wts[ 5] = wts[2]; + wts[ 6] = wts[1]; + wts[ 7] = wts[0]; return; } @@ -193,28 +205,28 @@ void QGaussLobatto::init_1D() case FOURTEENTH: case FIFTEENTH: { - _points.resize (9); - _weights.resize(9); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -8.9975799541146015731234524441834e-01_R; - _points[ 2](0) = -6.7718627951073775344588542709134e-01_R; - _points[ 3](0) = -3.6311746382617815871075206870866e-01_R; - _points[ 4](0) = 0.; - _points[ 5] = -_points[3]; - _points[ 6] = -_points[2]; - _points[ 7] = -_points[1]; - _points[ 8] = -_points[0]; - - _weights[ 0] = 2.7777777777777777777777777777778e-02_R; - _weights[ 1] = 1.6549536156080552504633972002921e-01_R; - _weights[ 2] = 2.7453871250016173528070561857937e-01_R; - _weights[ 3] = 3.4642851097304634511513153213972e-01_R; - _weights[ 4] = 3.7151927437641723356009070294785e-01_R; - _weights[ 5] = _weights[3]; - _weights[ 6] = _weights[2]; - _weights[ 7] = _weights[1]; - _weights[ 8] = _weights[0]; + pts.resize (9); + wts.resize(9); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -8.9975799541146015731234524441834e-01_R; + pts[ 2] = -6.7718627951073775344588542709134e-01_R; + pts[ 3] = -3.6311746382617815871075206870866e-01_R; + pts[ 4] = 0.; + pts[ 5] = -pts[3]; + pts[ 6] = -pts[2]; + pts[ 7] = -pts[1]; + pts[ 8] = -pts[0]; + + wts[ 0] = 2.7777777777777777777777777777778e-02_R; + wts[ 1] = 1.6549536156080552504633972002921e-01_R; + wts[ 2] = 2.7453871250016173528070561857937e-01_R; + wts[ 3] = 3.4642851097304634511513153213972e-01_R; + wts[ 4] = 3.7151927437641723356009070294785e-01_R; + wts[ 5] = wts[3]; + wts[ 6] = wts[2]; + wts[ 7] = wts[1]; + wts[ 8] = wts[0]; return; } @@ -223,30 +235,30 @@ void QGaussLobatto::init_1D() case SIXTEENTH: case SEVENTEENTH: { - _points.resize (10); - _weights.resize(10); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.1953390816645881382893266082234e-01_R; - _points[ 2](0) = -7.3877386510550507500310617485983e-01_R; - _points[ 3](0) = -4.7792494981044449566117509273126e-01_R; - _points[ 4](0) = -1.6527895766638702462621976595817e-01_R; - _points[ 5] = -_points[4]; - _points[ 6] = -_points[3]; - _points[ 7] = -_points[2]; - _points[ 8] = -_points[1]; - _points[ 9] = -_points[0]; - - _weights[ 0] = 2.2222222222222222222222222222222e-02_R; - _weights[ 1] = 1.3330599085107011112622717075539e-01_R; - _weights[ 2] = 2.2488934206312645211945782173105e-01_R; - _weights[ 3] = 2.9204268367968375787558225737444e-01_R; - _weights[ 4] = 3.2753976118389745665651052791689e-01_R; - _weights[ 5] = _weights[4]; - _weights[ 6] = _weights[3]; - _weights[ 7] = _weights[2]; - _weights[ 8] = _weights[1]; - _weights[ 9] = _weights[0]; + pts.resize (10); + wts.resize(10); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.1953390816645881382893266082234e-01_R; + pts[ 2] = -7.3877386510550507500310617485983e-01_R; + pts[ 3] = -4.7792494981044449566117509273126e-01_R; + pts[ 4] = -1.6527895766638702462621976595817e-01_R; + pts[ 5] = -pts[4]; + pts[ 6] = -pts[3]; + pts[ 7] = -pts[2]; + pts[ 8] = -pts[1]; + pts[ 9] = -pts[0]; + + wts[ 0] = 2.2222222222222222222222222222222e-02_R; + wts[ 1] = 1.3330599085107011112622717075539e-01_R; + wts[ 2] = 2.2488934206312645211945782173105e-01_R; + wts[ 3] = 2.9204268367968375787558225737444e-01_R; + wts[ 4] = 3.2753976118389745665651052791689e-01_R; + wts[ 5] = wts[4]; + wts[ 6] = wts[3]; + wts[ 7] = wts[2]; + wts[ 8] = wts[1]; + wts[ 9] = wts[0]; return; } @@ -255,32 +267,32 @@ void QGaussLobatto::init_1D() case EIGHTTEENTH: case NINETEENTH: { - _points.resize (11); - _weights.resize(11); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.3400143040805913433227413609938e-01_R; - _points[ 2](0) = -7.8448347366314441862241781610846e-01_R; - _points[ 3](0) = -5.6523532699620500647096396947775e-01_R; - _points[ 4](0) = -2.9575813558693939143191151555906e-01_R; - _points[ 5](0) = 0.; - _points[ 6] = -_points[4]; - _points[ 7] = -_points[3]; - _points[ 8] = -_points[2]; - _points[ 9] = -_points[1]; - _points[10] = -_points[0]; - - _weights[ 0] = 1.8181818181818181818181818181818e-02_R; - _weights[ 1] = 1.0961227326699486446140344958035e-01_R; - _weights[ 2] = 1.8716988178030520410814152189943e-01_R; - _weights[ 3] = 2.4804810426402831404008486642187e-01_R; - _weights[ 4] = 2.8687912477900808867922240333154e-01_R; - _weights[ 5] = 3.0021759545569069378593188116998e-01_R; - _weights[ 6] = _weights[4]; - _weights[ 7] = _weights[3]; - _weights[ 8] = _weights[2]; - _weights[ 9] = _weights[1]; - _weights[10] = _weights[0]; + pts.resize (11); + wts.resize(11); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.3400143040805913433227413609938e-01_R; + pts[ 2] = -7.8448347366314441862241781610846e-01_R; + pts[ 3] = -5.6523532699620500647096396947775e-01_R; + pts[ 4] = -2.9575813558693939143191151555906e-01_R; + pts[ 5] = 0.; + pts[ 6] = -pts[4]; + pts[ 7] = -pts[3]; + pts[ 8] = -pts[2]; + pts[ 9] = -pts[1]; + pts[10] = -pts[0]; + + wts[ 0] = 1.8181818181818181818181818181818e-02_R; + wts[ 1] = 1.0961227326699486446140344958035e-01_R; + wts[ 2] = 1.8716988178030520410814152189943e-01_R; + wts[ 3] = 2.4804810426402831404008486642187e-01_R; + wts[ 4] = 2.8687912477900808867922240333154e-01_R; + wts[ 5] = 3.0021759545569069378593188116998e-01_R; + wts[ 6] = wts[4]; + wts[ 7] = wts[3]; + wts[ 8] = wts[2]; + wts[ 9] = wts[1]; + wts[10] = wts[0]; return; } @@ -289,34 +301,34 @@ void QGaussLobatto::init_1D() case TWENTIETH: case TWENTYFIRST: { - _points.resize (12); - _weights.resize(12); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.4489927222288222340758013830322e-01_R; - _points[ 2](0) = -8.1927932164400667834864158171690e-01_R; - _points[ 3](0) = -6.3287615303186067766240485444366e-01_R; - _points[ 4](0) = -3.9953094096534893226434979156697e-01_R; - _points[ 5](0) = -1.3655293285492755486406185573969e-01_R; - _points[ 6] = -_points[5]; - _points[ 7] = -_points[4]; - _points[ 8] = -_points[3]; - _points[ 9] = -_points[2]; - _points[10] = -_points[1]; - _points[11] = -_points[0]; - - _weights[ 0] = 1.5151515151515151515151515151515e-02_R; - _weights[ 1] = 9.1684517413196130668342594134079e-02_R; - _weights[ 2] = 1.5797470556437011516467106270034e-01_R; - _weights[ 3] = 2.1250841776102114535830207736687e-01_R; - _weights[ 4] = 2.5127560319920128029324441214760e-01_R; - _weights[ 5] = 2.7140524091069617700028833849960e-01_R; - _weights[ 6] = _weights[5]; - _weights[ 7] = _weights[4]; - _weights[ 8] = _weights[3]; - _weights[ 9] = _weights[2]; - _weights[10] = _weights[1]; - _weights[11] = _weights[0]; + pts.resize (12); + wts.resize(12); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.4489927222288222340758013830322e-01_R; + pts[ 2] = -8.1927932164400667834864158171690e-01_R; + pts[ 3] = -6.3287615303186067766240485444366e-01_R; + pts[ 4] = -3.9953094096534893226434979156697e-01_R; + pts[ 5] = -1.3655293285492755486406185573969e-01_R; + pts[ 6] = -pts[5]; + pts[ 7] = -pts[4]; + pts[ 8] = -pts[3]; + pts[ 9] = -pts[2]; + pts[10] = -pts[1]; + pts[11] = -pts[0]; + + wts[ 0] = 1.5151515151515151515151515151515e-02_R; + wts[ 1] = 9.1684517413196130668342594134079e-02_R; + wts[ 2] = 1.5797470556437011516467106270034e-01_R; + wts[ 3] = 2.1250841776102114535830207736687e-01_R; + wts[ 4] = 2.5127560319920128029324441214760e-01_R; + wts[ 5] = 2.7140524091069617700028833849960e-01_R; + wts[ 6] = wts[5]; + wts[ 7] = wts[4]; + wts[ 8] = wts[3]; + wts[ 9] = wts[2]; + wts[10] = wts[1]; + wts[11] = wts[0]; return; } @@ -325,36 +337,36 @@ void QGaussLobatto::init_1D() case TWENTYSECOND: case TWENTYTHIRD: { - _points.resize (13); - _weights.resize(13); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.5330984664216391189690546475545e-01_R; - _points[ 2](0) = -8.4634756465187231686592560709875e-01_R; - _points[ 3](0) = -6.8618846908175742607275903956636e-01_R; - _points[ 4](0) = -4.8290982109133620174693723363693e-01_R; - _points[ 5](0) = -2.4928693010623999256867370037423e-01_R; - _points[ 6](0) = 0.; - _points[ 7] = -_points[5]; - _points[ 8] = -_points[4]; - _points[ 9] = -_points[3]; - _points[10] = -_points[2]; - _points[11] = -_points[1]; - _points[12] = -_points[0]; - - _weights[ 0] = 1.2820512820512820512820512820513e-02_R; - _weights[ 1] = 7.7801686746818927793588988333134e-02_R; - _weights[ 2] = 1.3498192668960834911991476258937e-01_R; - _weights[ 3] = 1.8364686520355009200749425874681e-01_R; - _weights[ 4] = 2.2076779356611008608553400837940e-01_R; - _weights[ 5] = 2.4401579030667635645857814836016e-01_R; - _weights[ 6] = 2.5193084933344673604413864154124e-01_R; - _weights[ 7] = _weights[5]; - _weights[ 8] = _weights[4]; - _weights[ 9] = _weights[3]; - _weights[10] = _weights[2]; - _weights[11] = _weights[1]; - _weights[12] = _weights[0]; + pts.resize (13); + wts.resize(13); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.5330984664216391189690546475545e-01_R; + pts[ 2] = -8.4634756465187231686592560709875e-01_R; + pts[ 3] = -6.8618846908175742607275903956636e-01_R; + pts[ 4] = -4.8290982109133620174693723363693e-01_R; + pts[ 5] = -2.4928693010623999256867370037423e-01_R; + pts[ 6] = 0.; + pts[ 7] = -pts[5]; + pts[ 8] = -pts[4]; + pts[ 9] = -pts[3]; + pts[10] = -pts[2]; + pts[11] = -pts[1]; + pts[12] = -pts[0]; + + wts[ 0] = 1.2820512820512820512820512820513e-02_R; + wts[ 1] = 7.7801686746818927793588988333134e-02_R; + wts[ 2] = 1.3498192668960834911991476258937e-01_R; + wts[ 3] = 1.8364686520355009200749425874681e-01_R; + wts[ 4] = 2.2076779356611008608553400837940e-01_R; + wts[ 5] = 2.4401579030667635645857814836016e-01_R; + wts[ 6] = 2.5193084933344673604413864154124e-01_R; + wts[ 7] = wts[5]; + wts[ 8] = wts[4]; + wts[ 9] = wts[3]; + wts[10] = wts[2]; + wts[11] = wts[1]; + wts[12] = wts[0]; return; } @@ -363,38 +375,38 @@ void QGaussLobatto::init_1D() case TWENTYFOURTH: case TWENTYFIFTH: { - _points.resize (14); - _weights.resize(14); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.5993504526726090135510016201542e-01_R; - _points[ 2](0) = -8.6780105383034725100022020290826e-01_R; - _points[ 3](0) = -7.2886859909132614058467240052088e-01_R; - _points[ 4](0) = -5.5063940292864705531662270585908e-01_R; - _points[ 5](0) = -3.4272401334271284504390340364167e-01_R; - _points[ 6](0) = -1.1633186888370386765877670973616e-01_R; - _points[ 7] = -_points[6]; - _points[ 8] = -_points[5]; - _points[ 9] = -_points[4]; - _points[10] = -_points[3]; - _points[11] = -_points[2]; - _points[12] = -_points[1]; - _points[13] = -_points[0]; - - _weights[ 0] = 1.0989010989010989010989010989011e-02_R; - _weights[ 1] = 6.6837284497681284634070660746053e-02_R; - _weights[ 2] = 1.1658665589871165154099667065465e-01_R; - _weights[ 3] = 1.6002185176295214241282099798759e-01_R; - _weights[ 4] = 1.9482614937341611864033177837588e-01_R; - _weights[ 5] = 2.1912625300977075487116252395417e-01_R; - _weights[ 6] = 2.3161279446845705888962835729264e-01_R; - _weights[ 7] = _weights[6]; - _weights[ 8] = _weights[5]; - _weights[ 9] = _weights[4]; - _weights[10] = _weights[3]; - _weights[11] = _weights[2]; - _weights[12] = _weights[1]; - _weights[13] = _weights[0]; + pts.resize (14); + wts.resize(14); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.5993504526726090135510016201542e-01_R; + pts[ 2] = -8.6780105383034725100022020290826e-01_R; + pts[ 3] = -7.2886859909132614058467240052088e-01_R; + pts[ 4] = -5.5063940292864705531662270585908e-01_R; + pts[ 5] = -3.4272401334271284504390340364167e-01_R; + pts[ 6] = -1.1633186888370386765877670973616e-01_R; + pts[ 7] = -pts[6]; + pts[ 8] = -pts[5]; + pts[ 9] = -pts[4]; + pts[10] = -pts[3]; + pts[11] = -pts[2]; + pts[12] = -pts[1]; + pts[13] = -pts[0]; + + wts[ 0] = 1.0989010989010989010989010989011e-02_R; + wts[ 1] = 6.6837284497681284634070660746053e-02_R; + wts[ 2] = 1.1658665589871165154099667065465e-01_R; + wts[ 3] = 1.6002185176295214241282099798759e-01_R; + wts[ 4] = 1.9482614937341611864033177837588e-01_R; + wts[ 5] = 2.1912625300977075487116252395417e-01_R; + wts[ 6] = 2.3161279446845705888962835729264e-01_R; + wts[ 7] = wts[6]; + wts[ 8] = wts[5]; + wts[ 9] = wts[4]; + wts[10] = wts[3]; + wts[11] = wts[2]; + wts[12] = wts[1]; + wts[13] = wts[0]; return; } @@ -403,40 +415,40 @@ void QGaussLobatto::init_1D() case TWENTYSIXTH: case TWENTYSEVENTH: { - _points.resize (15); - _weights.resize(15); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.6524592650383857279585139206960e-01_R; - _points[ 2](0) = -8.8508204422297629882540163148223e-01_R; - _points[ 3](0) = -7.6351968995181520070411847597629e-01_R; - _points[ 4](0) = -6.0625320546984571112352993863673e-01_R; - _points[ 5](0) = -4.2063805471367248092189693873858e-01_R; - _points[ 6](0) = -2.1535395536379423822567944627292e-01_R; - _points[ 7](0) = 0.; - _points[ 8] = -_points[6]; - _points[ 9] = -_points[5]; - _points[10] = -_points[4]; - _points[11] = -_points[3]; - _points[12] = -_points[2]; - _points[13] = -_points[1]; - _points[14] = -_points[0]; - - _weights[ 0] = 9.5238095238095238095238095238095e-03_R; - _weights[ 1] = 5.8029893028601249096880584025282e-02_R; - _weights[ 2] = 1.0166007032571806760366617078880e-01_R; - _weights[ 3] = 1.4051169980242810946044680564367e-01_R; - _weights[ 4] = 1.7278964725360094905207709940835e-01_R; - _weights[ 5] = 1.9698723596461335609250034650741e-01_R; - _weights[ 6] = 2.1197358592682092012743007697722e-01_R; - _weights[ 7] = 2.1704811634881564951495021425091e-01_R; - _weights[ 8] = _weights[6]; - _weights[ 9] = _weights[5]; - _weights[10] = _weights[4]; - _weights[11] = _weights[3]; - _weights[12] = _weights[2]; - _weights[13] = _weights[1]; - _weights[14] = _weights[0]; + pts.resize (15); + wts.resize(15); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.6524592650383857279585139206960e-01_R; + pts[ 2] = -8.8508204422297629882540163148223e-01_R; + pts[ 3] = -7.6351968995181520070411847597629e-01_R; + pts[ 4] = -6.0625320546984571112352993863673e-01_R; + pts[ 5] = -4.2063805471367248092189693873858e-01_R; + pts[ 6] = -2.1535395536379423822567944627292e-01_R; + pts[ 7] = 0.; + pts[ 8] = -pts[6]; + pts[ 9] = -pts[5]; + pts[10] = -pts[4]; + pts[11] = -pts[3]; + pts[12] = -pts[2]; + pts[13] = -pts[1]; + pts[14] = -pts[0]; + + wts[ 0] = 9.5238095238095238095238095238095e-03_R; + wts[ 1] = 5.8029893028601249096880584025282e-02_R; + wts[ 2] = 1.0166007032571806760366617078880e-01_R; + wts[ 3] = 1.4051169980242810946044680564367e-01_R; + wts[ 4] = 1.7278964725360094905207709940835e-01_R; + wts[ 5] = 1.9698723596461335609250034650741e-01_R; + wts[ 6] = 2.1197358592682092012743007697722e-01_R; + wts[ 7] = 2.1704811634881564951495021425091e-01_R; + wts[ 8] = wts[6]; + wts[ 9] = wts[5]; + wts[10] = wts[4]; + wts[11] = wts[3]; + wts[12] = wts[2]; + wts[13] = wts[1]; + wts[14] = wts[0]; return; } @@ -445,42 +457,42 @@ void QGaussLobatto::init_1D() case TWENTYEIGHTH: case TWENTYNINTH: { - _points.resize (16); - _weights.resize(16); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.6956804627021793295224273836746e-01_R; - _points[ 2](0) = -8.9920053309347209299462826151985e-01_R; - _points[ 3](0) = -7.9200829186181506393108827096315e-01_R; - _points[ 4](0) = -6.5238870288249308946788321964058e-01_R; - _points[ 5](0) = -4.8605942188713761178189078584687e-01_R; - _points[ 6](0) = -2.9983046890076320809835345472230e-01_R; - _points[ 7](0) = -1.0132627352194944784303300504592e-01_R; - _points[ 8] = -_points[7]; - _points[ 9] = -_points[6]; - _points[10] = -_points[5]; - _points[11] = -_points[4]; - _points[12] = -_points[3]; - _points[13] = -_points[2]; - _points[14] = -_points[1]; - _points[15] = -_points[0]; - - _weights[ 0] = 8.3333333333333333333333333333333e-03_R; - _weights[ 1] = 5.0850361005919905403244919565455e-02_R; - _weights[ 2] = 8.9393697325930800991052080166084e-02_R; - _weights[ 3] = 1.2425538213251409834953633265731e-01_R; - _weights[ 4] = 1.5402698080716428081564494048499e-01_R; - _weights[ 5] = 1.7749191339170412530107566952836e-01_R; - _weights[ 6] = 1.9369002382520358431691359885352e-01_R; - _weights[ 7] = 2.0195830817822987148919912541094e-01_R; - _weights[ 8] = _weights[7]; - _weights[ 9] = _weights[6]; - _weights[10] = _weights[5]; - _weights[11] = _weights[4]; - _weights[12] = _weights[3]; - _weights[13] = _weights[2]; - _weights[14] = _weights[1]; - _weights[15] = _weights[0]; + pts.resize (16); + wts.resize(16); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.6956804627021793295224273836746e-01_R; + pts[ 2] = -8.9920053309347209299462826151985e-01_R; + pts[ 3] = -7.9200829186181506393108827096315e-01_R; + pts[ 4] = -6.5238870288249308946788321964058e-01_R; + pts[ 5] = -4.8605942188713761178189078584687e-01_R; + pts[ 6] = -2.9983046890076320809835345472230e-01_R; + pts[ 7] = -1.0132627352194944784303300504592e-01_R; + pts[ 8] = -pts[7]; + pts[ 9] = -pts[6]; + pts[10] = -pts[5]; + pts[11] = -pts[4]; + pts[12] = -pts[3]; + pts[13] = -pts[2]; + pts[14] = -pts[1]; + pts[15] = -pts[0]; + + wts[ 0] = 8.3333333333333333333333333333333e-03_R; + wts[ 1] = 5.0850361005919905403244919565455e-02_R; + wts[ 2] = 8.9393697325930800991052080166084e-02_R; + wts[ 3] = 1.2425538213251409834953633265731e-01_R; + wts[ 4] = 1.5402698080716428081564494048499e-01_R; + wts[ 5] = 1.7749191339170412530107566952836e-01_R; + wts[ 6] = 1.9369002382520358431691359885352e-01_R; + wts[ 7] = 2.0195830817822987148919912541094e-01_R; + wts[ 8] = wts[7]; + wts[ 9] = wts[6]; + wts[10] = wts[5]; + wts[11] = wts[4]; + wts[12] = wts[3]; + wts[13] = wts[2]; + wts[14] = wts[1]; + wts[15] = wts[0]; return; } @@ -489,44 +501,44 @@ void QGaussLobatto::init_1D() case THIRTIETH: case THIRTYFIRST: { - _points.resize (17); - _weights.resize(17); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.7313217663141831415697950187372e-01_R; - _points[ 2](0) = -9.1087999591557359562380250639773e-01_R; - _points[ 3](0) = -8.1569625122177030710675055323753e-01_R; - _points[ 4](0) = -6.9102898062768470539491935737245e-01_R; - _points[ 5](0) = -5.4138539933010153912373340750406e-01_R; - _points[ 6](0) = -3.7217443356547704190723468073526e-01_R; - _points[ 7](0) = -1.8951197351831738830426301475311e-01_R; - _points[ 8](0) = 0.; - _points[ 9] = -_points[7]; - _points[10] = -_points[6]; - _points[11] = -_points[5]; - _points[12] = -_points[4]; - _points[13] = -_points[3]; - _points[14] = -_points[2]; - _points[15] = -_points[1]; - _points[16] = -_points[0]; - - _weights[ 0] = 7.3529411764705882352941176470588e-03_R; - _weights[ 1] = 4.4921940543254209647400954623212e-02_R; - _weights[ 2] = 7.9198270503687119190264429952835e-02_R; - _weights[ 3] = 1.1059290900702816137577270522008e-01_R; - _weights[ 4] = 1.3798774620192655905620157495403e-01_R; - _weights[ 5] = 1.6039466199762153951632836586475e-01_R; - _weights[ 6] = 1.7700425351565787043694574536329e-01_R; - _weights[ 7] = 1.8721633967761923589208848286062e-01_R; - _weights[ 8] = 1.9066187475346943329940724702825e-01_R; - _weights[ 9] = _weights[7]; - _weights[10] = _weights[6]; - _weights[11] = _weights[5]; - _weights[12] = _weights[4]; - _weights[13] = _weights[3]; - _weights[14] = _weights[2]; - _weights[15] = _weights[1]; - _weights[16] = _weights[0]; + pts.resize (17); + wts.resize(17); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.7313217663141831415697950187372e-01_R; + pts[ 2] = -9.1087999591557359562380250639773e-01_R; + pts[ 3] = -8.1569625122177030710675055323753e-01_R; + pts[ 4] = -6.9102898062768470539491935737245e-01_R; + pts[ 5] = -5.4138539933010153912373340750406e-01_R; + pts[ 6] = -3.7217443356547704190723468073526e-01_R; + pts[ 7] = -1.8951197351831738830426301475311e-01_R; + pts[ 8] = 0.; + pts[ 9] = -pts[7]; + pts[10] = -pts[6]; + pts[11] = -pts[5]; + pts[12] = -pts[4]; + pts[13] = -pts[3]; + pts[14] = -pts[2]; + pts[15] = -pts[1]; + pts[16] = -pts[0]; + + wts[ 0] = 7.3529411764705882352941176470588e-03_R; + wts[ 1] = 4.4921940543254209647400954623212e-02_R; + wts[ 2] = 7.9198270503687119190264429952835e-02_R; + wts[ 3] = 1.1059290900702816137577270522008e-01_R; + wts[ 4] = 1.3798774620192655905620157495403e-01_R; + wts[ 5] = 1.6039466199762153951632836586475e-01_R; + wts[ 6] = 1.7700425351565787043694574536329e-01_R; + wts[ 7] = 1.8721633967761923589208848286062e-01_R; + wts[ 8] = 1.9066187475346943329940724702825e-01_R; + wts[ 9] = wts[7]; + wts[10] = wts[6]; + wts[11] = wts[5]; + wts[12] = wts[4]; + wts[13] = wts[3]; + wts[14] = wts[2]; + wts[15] = wts[1]; + wts[16] = wts[0]; return; } @@ -535,46 +547,46 @@ void QGaussLobatto::init_1D() case THIRTYSECOND: case THIRTYTHIRD: { - _points.resize (18); - _weights.resize(18); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.7610555741219854286451892434170e-01_R; - _points[ 2](0) = -9.2064918534753387383785462543128e-01_R; - _points[ 3](0) = -8.3559353521809021371364636232794e-01_R; - _points[ 4](0) = -7.2367932928324268130621036530207e-01_R; - _points[ 5](0) = -5.8850483431866176117353589319356e-01_R; - _points[ 6](0) = -4.3441503691212397534228713674067e-01_R; - _points[ 7](0) = -2.6636265287828098416766533202560e-01_R; - _points[ 8](0) = -8.9749093484652111022645010088562e-02_R; - _points[ 9] = -_points[8]; - _points[10] = -_points[7]; - _points[11] = -_points[6]; - _points[12] = -_points[5]; - _points[13] = -_points[4]; - _points[14] = -_points[3]; - _points[15] = -_points[2]; - _points[16] = -_points[1]; - _points[17] = -_points[0]; - - _weights[ 0] = 6.5359477124183006535947712418301e-03_R; - _weights[ 1] = 3.9970628810914066137599176410101e-02_R; - _weights[ 2] = 7.0637166885633664999222960167786e-02_R; - _weights[ 3] = 9.9016271717502802394423605318672e-02_R; - _weights[ 4] = 1.2421053313296710026339635889675e-01_R; - _weights[ 5] = 1.4541196157380226798300321049443e-01_R; - _weights[ 6] = 1.6193951723760248926432670670023e-01_R; - _weights[ 7] = 1.7326210948945622601061440382668e-01_R; - _weights[ 8] = 1.7901586343970308229381880694353e-01_R; - _weights[ 9] = _weights[8]; - _weights[10] = _weights[7]; - _weights[11] = _weights[6]; - _weights[12] = _weights[5]; - _weights[13] = _weights[4]; - _weights[14] = _weights[3]; - _weights[15] = _weights[2]; - _weights[16] = _weights[1]; - _weights[17] = _weights[0]; + pts.resize (18); + wts.resize(18); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.7610555741219854286451892434170e-01_R; + pts[ 2] = -9.2064918534753387383785462543128e-01_R; + pts[ 3] = -8.3559353521809021371364636232794e-01_R; + pts[ 4] = -7.2367932928324268130621036530207e-01_R; + pts[ 5] = -5.8850483431866176117353589319356e-01_R; + pts[ 6] = -4.3441503691212397534228713674067e-01_R; + pts[ 7] = -2.6636265287828098416766533202560e-01_R; + pts[ 8] = -8.9749093484652111022645010088562e-02_R; + pts[ 9] = -pts[8]; + pts[10] = -pts[7]; + pts[11] = -pts[6]; + pts[12] = -pts[5]; + pts[13] = -pts[4]; + pts[14] = -pts[3]; + pts[15] = -pts[2]; + pts[16] = -pts[1]; + pts[17] = -pts[0]; + + wts[ 0] = 6.5359477124183006535947712418301e-03_R; + wts[ 1] = 3.9970628810914066137599176410101e-02_R; + wts[ 2] = 7.0637166885633664999222960167786e-02_R; + wts[ 3] = 9.9016271717502802394423605318672e-02_R; + wts[ 4] = 1.2421053313296710026339635889675e-01_R; + wts[ 5] = 1.4541196157380226798300321049443e-01_R; + wts[ 6] = 1.6193951723760248926432670670023e-01_R; + wts[ 7] = 1.7326210948945622601061440382668e-01_R; + wts[ 8] = 1.7901586343970308229381880694353e-01_R; + wts[ 9] = wts[8]; + wts[10] = wts[7]; + wts[11] = wts[6]; + wts[12] = wts[5]; + wts[13] = wts[4]; + wts[14] = wts[3]; + wts[15] = wts[2]; + wts[16] = wts[1]; + wts[17] = wts[0]; return; } @@ -583,48 +595,48 @@ void QGaussLobatto::init_1D() case THIRTYFOURTH: case THIRTYFIFTH: { - _points.resize (19); - _weights.resize(19); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.7861176622208009515263406311022e-01_R; - _points[ 2](0) = -9.2890152815258624371794025879655e-01_R; - _points[ 3](0) = -8.5246057779664609308595597004106e-01_R; - _points[ 4](0) = -7.5149420255261301416363748963394e-01_R; - _points[ 5](0) = -6.2890813726522049776683230622873e-01_R; - _points[ 6](0) = -4.8822928568071350277790963762492e-01_R; - _points[ 7](0) = -3.3350484782449861029850010384493e-01_R; - _points[ 8](0) = -1.6918602340928157137515415344488e-01_R; - _points[ 9](0) = 0.; - _points[10] = -_points[8]; - _points[11] = -_points[7]; - _points[12] = -_points[6]; - _points[13] = -_points[5]; - _points[14] = -_points[4]; - _points[15] = -_points[3]; - _points[16] = -_points[2]; - _points[17] = -_points[1]; - _points[18] = -_points[0]; - - _weights[ 0] = 5.8479532163742690058479532163743e-03_R; - _weights[ 1] = 3.5793365186176477115425569035122e-02_R; - _weights[ 2] = 6.3381891762629736851695690418317e-02_R; - _weights[ 3] = 8.9131757099207084448008790556153e-02_R; - _weights[ 4] = 1.1231534147730504407091001546378e-01_R; - _weights[ 5] = 1.3226728044875077692604673390973e-01_R; - _weights[ 6] = 1.4841394259593888500968064366841e-01_R; - _weights[ 7] = 1.6029092404406124197991096818359e-01_R; - _weights[ 8] = 1.6755658452714286727013727774026e-01_R; - _weights[ 9] = 1.7000191928482723464467271561652e-01_R; - _weights[10] = _weights[8]; - _weights[11] = _weights[7]; - _weights[12] = _weights[6]; - _weights[13] = _weights[5]; - _weights[14] = _weights[4]; - _weights[15] = _weights[3]; - _weights[16] = _weights[2]; - _weights[17] = _weights[1]; - _weights[18] = _weights[0]; + pts.resize (19); + wts.resize(19); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.7861176622208009515263406311022e-01_R; + pts[ 2] = -9.2890152815258624371794025879655e-01_R; + pts[ 3] = -8.5246057779664609308595597004106e-01_R; + pts[ 4] = -7.5149420255261301416363748963394e-01_R; + pts[ 5] = -6.2890813726522049776683230622873e-01_R; + pts[ 6] = -4.8822928568071350277790963762492e-01_R; + pts[ 7] = -3.3350484782449861029850010384493e-01_R; + pts[ 8] = -1.6918602340928157137515415344488e-01_R; + pts[ 9] = 0.; + pts[10] = -pts[8]; + pts[11] = -pts[7]; + pts[12] = -pts[6]; + pts[13] = -pts[5]; + pts[14] = -pts[4]; + pts[15] = -pts[3]; + pts[16] = -pts[2]; + pts[17] = -pts[1]; + pts[18] = -pts[0]; + + wts[ 0] = 5.8479532163742690058479532163743e-03_R; + wts[ 1] = 3.5793365186176477115425569035122e-02_R; + wts[ 2] = 6.3381891762629736851695690418317e-02_R; + wts[ 3] = 8.9131757099207084448008790556153e-02_R; + wts[ 4] = 1.1231534147730504407091001546378e-01_R; + wts[ 5] = 1.3226728044875077692604673390973e-01_R; + wts[ 6] = 1.4841394259593888500968064366841e-01_R; + wts[ 7] = 1.6029092404406124197991096818359e-01_R; + wts[ 8] = 1.6755658452714286727013727774026e-01_R; + wts[ 9] = 1.7000191928482723464467271561652e-01_R; + wts[10] = wts[8]; + wts[11] = wts[7]; + wts[12] = wts[6]; + wts[13] = wts[5]; + wts[14] = wts[4]; + wts[15] = wts[3]; + wts[16] = wts[2]; + wts[17] = wts[1]; + wts[18] = wts[0]; return; } @@ -633,50 +645,50 @@ void QGaussLobatto::init_1D() case THIRTYSIXTH: case THIRTYSEVENTH: { - _points.resize (20); - _weights.resize(20); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.8074370489391417192544643858423e-01_R; - _points[ 2](0) = -9.3593449881266543571618158493063e-01_R; - _points[ 3](0) = -8.6687797808995014130984721461629e-01_R; - _points[ 4](0) = -7.7536826095205587041431752759469e-01_R; - _points[ 5](0) = -6.6377640229031128984640332297116e-01_R; - _points[ 6](0) = -5.3499286403188626164813596182898e-01_R; - _points[ 7](0) = -3.9235318371390929938647470381582e-01_R; - _points[ 8](0) = -2.3955170592298649518240135692709e-01_R; - _points[ 9](0) = -8.0545937238821837975944518159554e-02_R; - _points[10] = -_points[9]; - _points[11] = -_points[8]; - _points[12] = -_points[7]; - _points[13] = -_points[6]; - _points[14] = -_points[5]; - _points[15] = -_points[4]; - _points[16] = -_points[3]; - _points[17] = -_points[2]; - _points[18] = -_points[1]; - _points[19] = -_points[0]; - - _weights[ 0] = 5.2631578947368421052631578947368e-03_R; - _weights[ 1] = 3.2237123188488941491605028117294e-02_R; - _weights[ 2] = 5.7181802127566826004753627173243e-02_R; - _weights[ 3] = 8.0631763996119603144776846113721e-02_R; - _weights[ 4] = 1.0199149969945081568378120573289e-01_R; - _weights[ 5] = 1.2070922762867472509942970500239e-01_R; - _weights[ 6] = 1.3630048235872418448978079298903e-01_R; - _weights[ 7] = 1.4836155407091682581471301373397e-01_R; - _weights[ 8] = 1.5658010264747548715816989679364e-01_R; - _weights[ 9] = 1.6074328638784574900772672644908e-01_R; - _weights[10] = _weights[9]; - _weights[11] = _weights[8]; - _weights[12] = _weights[7]; - _weights[13] = _weights[6]; - _weights[14] = _weights[5]; - _weights[15] = _weights[4]; - _weights[16] = _weights[3]; - _weights[17] = _weights[2]; - _weights[18] = _weights[1]; - _weights[19] = _weights[0]; + pts.resize (20); + wts.resize(20); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.8074370489391417192544643858423e-01_R; + pts[ 2] = -9.3593449881266543571618158493063e-01_R; + pts[ 3] = -8.6687797808995014130984721461629e-01_R; + pts[ 4] = -7.7536826095205587041431752759469e-01_R; + pts[ 5] = -6.6377640229031128984640332297116e-01_R; + pts[ 6] = -5.3499286403188626164813596182898e-01_R; + pts[ 7] = -3.9235318371390929938647470381582e-01_R; + pts[ 8] = -2.3955170592298649518240135692709e-01_R; + pts[ 9] = -8.0545937238821837975944518159554e-02_R; + pts[10] = -pts[9]; + pts[11] = -pts[8]; + pts[12] = -pts[7]; + pts[13] = -pts[6]; + pts[14] = -pts[5]; + pts[15] = -pts[4]; + pts[16] = -pts[3]; + pts[17] = -pts[2]; + pts[18] = -pts[1]; + pts[19] = -pts[0]; + + wts[ 0] = 5.2631578947368421052631578947368e-03_R; + wts[ 1] = 3.2237123188488941491605028117294e-02_R; + wts[ 2] = 5.7181802127566826004753627173243e-02_R; + wts[ 3] = 8.0631763996119603144776846113721e-02_R; + wts[ 4] = 1.0199149969945081568378120573289e-01_R; + wts[ 5] = 1.2070922762867472509942970500239e-01_R; + wts[ 6] = 1.3630048235872418448978079298903e-01_R; + wts[ 7] = 1.4836155407091682581471301373397e-01_R; + wts[ 8] = 1.5658010264747548715816989679364e-01_R; + wts[ 9] = 1.6074328638784574900772672644908e-01_R; + wts[10] = wts[9]; + wts[11] = wts[8]; + wts[12] = wts[7]; + wts[13] = wts[6]; + wts[14] = wts[5]; + wts[15] = wts[4]; + wts[16] = wts[3]; + wts[17] = wts[2]; + wts[18] = wts[1]; + wts[19] = wts[0]; return; } @@ -685,52 +697,52 @@ void QGaussLobatto::init_1D() case THIRTYEIGHTH: case THIRTYNINTH: { - _points.resize (21); - _weights.resize(21); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.8257229660454802823448127655541e-01_R; - _points[ 2](0) = -9.4197629695974553429610265066144e-01_R; - _points[ 3](0) = -8.7929475532359046445115359630494e-01_R; - _points[ 4](0) = -7.9600192607771240474431258966036e-01_R; - _points[ 5](0) = -6.9405102606222323262731639319467e-01_R; - _points[ 6](0) = -5.7583196026183068692702187033809e-01_R; - _points[ 7](0) = -4.4411578327900210119451634960735e-01_R; - _points[ 8](0) = -3.0198985650876488727535186785875e-01_R; - _points[ 9](0) = -1.5278551580218546600635832848567e-01_R; - _points[10](0) = 0.; - _points[11] = -_points[9]; - _points[12] = -_points[8]; - _points[13] = -_points[7]; - _points[14] = -_points[6]; - _points[15] = -_points[5]; - _points[16] = -_points[4]; - _points[17] = -_points[3]; - _points[18] = -_points[2]; - _points[19] = -_points[1]; - _points[20] = -_points[0]; - - _weights[ 0] = 4.7619047619047619047619047619048e-03_R; - _weights[ 1] = 2.9184840098505458609458543613171e-02_R; - _weights[ 2] = 5.1843169000849625072722971852830e-02_R; - _weights[ 3] = 7.3273918185074144252547861041894e-02_R; - _weights[ 4] = 9.2985467957886065301137664149214e-02_R; - _weights[ 5] = 1.1051708321912333526700048678439e-01_R; - _weights[ 6] = 1.2545812119086894801515753570800e-01_R; - _weights[ 7] = 1.3745846286004134358089961741515e-01_R; - _weights[ 8] = 1.4623686244797745926727053063439e-01_R; - _weights[ 9] = 1.5158757511168138445325068150529e-01_R; - _weights[10] = 1.5338519033217494855158440506754e-01_R; - _weights[11] = _weights[9]; - _weights[12] = _weights[8]; - _weights[13] = _weights[7]; - _weights[14] = _weights[6]; - _weights[15] = _weights[5]; - _weights[16] = _weights[4]; - _weights[17] = _weights[3]; - _weights[18] = _weights[2]; - _weights[19] = _weights[1]; - _weights[20] = _weights[0]; + pts.resize (21); + wts.resize(21); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.8257229660454802823448127655541e-01_R; + pts[ 2] = -9.4197629695974553429610265066144e-01_R; + pts[ 3] = -8.7929475532359046445115359630494e-01_R; + pts[ 4] = -7.9600192607771240474431258966036e-01_R; + pts[ 5] = -6.9405102606222323262731639319467e-01_R; + pts[ 6] = -5.7583196026183068692702187033809e-01_R; + pts[ 7] = -4.4411578327900210119451634960735e-01_R; + pts[ 8] = -3.0198985650876488727535186785875e-01_R; + pts[ 9] = -1.5278551580218546600635832848567e-01_R; + pts[10] = 0.; + pts[11] = -pts[9]; + pts[12] = -pts[8]; + pts[13] = -pts[7]; + pts[14] = -pts[6]; + pts[15] = -pts[5]; + pts[16] = -pts[4]; + pts[17] = -pts[3]; + pts[18] = -pts[2]; + pts[19] = -pts[1]; + pts[20] = -pts[0]; + + wts[ 0] = 4.7619047619047619047619047619048e-03_R; + wts[ 1] = 2.9184840098505458609458543613171e-02_R; + wts[ 2] = 5.1843169000849625072722971852830e-02_R; + wts[ 3] = 7.3273918185074144252547861041894e-02_R; + wts[ 4] = 9.2985467957886065301137664149214e-02_R; + wts[ 5] = 1.1051708321912333526700048678439e-01_R; + wts[ 6] = 1.2545812119086894801515753570800e-01_R; + wts[ 7] = 1.3745846286004134358089961741515e-01_R; + wts[ 8] = 1.4623686244797745926727053063439e-01_R; + wts[ 9] = 1.5158757511168138445325068150529e-01_R; + wts[10] = 1.5338519033217494855158440506754e-01_R; + wts[11] = wts[9]; + wts[12] = wts[8]; + wts[13] = wts[7]; + wts[14] = wts[6]; + wts[15] = wts[5]; + wts[16] = wts[4]; + wts[17] = wts[3]; + wts[18] = wts[2]; + wts[19] = wts[1]; + wts[20] = wts[0]; return; } @@ -739,54 +751,54 @@ void QGaussLobatto::init_1D() case FORTIETH: case FORTYFIRST: { - _points.resize (22); - _weights.resize(22); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.8415243845764617655228962221207e-01_R; - _points[ 2](0) = -9.4720428399922868052421376661573e-01_R; - _points[ 3](0) = -8.9006229019090447052965782577909e-01_R; - _points[ 4](0) = -8.1394892761192113604544184805614e-01_R; - _points[ 5](0) = -7.2048723996120215811988189639847e-01_R; - _points[ 6](0) = -6.1166943828425897122621160586993e-01_R; - _points[ 7](0) = -4.8981487518990234980875123568327e-01_R; - _points[ 8](0) = -3.5752071013891953806095728024018e-01_R; - _points[ 9](0) = -2.1760658515928504178795509346539e-01_R; - _points[10](0) = -7.3054540010898334761088790464107e-02_R; - _points[11] = -_points[10]; - _points[12] = -_points[9]; - _points[13] = -_points[8]; - _points[14] = -_points[7]; - _points[15] = -_points[6]; - _points[16] = -_points[5]; - _points[17] = -_points[4]; - _points[18] = -_points[3]; - _points[19] = -_points[2]; - _points[20] = -_points[1]; - _points[21] = -_points[0]; - - _weights[ 0] = 4.3290043290043290043290043290043e-03_R; - _weights[ 1] = 2.6545747682501757911627904520543e-02_R; - _weights[ 2] = 4.7214465293740752123775734864792e-02_R; - _weights[ 3] = 6.6865605864553076012404194157097e-02_R; - _weights[ 4] = 8.5090060391838447815711236095748e-02_R; - _weights[ 5] = 1.0150057480164767437243730374960e-01_R; - _weights[ 6] = 1.1574764465393906659003636772146e-01_R; - _weights[ 7] = 1.2752769665343027553084445930883e-01_R; - _weights[ 8] = 1.3658968861374142668617736220617e-01_R; - _weights[ 9] = 1.4274049227136140033623599356679e-01_R; - _weights[10] = 1.4584901944424179361642043947997e-01_R; - _weights[11] = _weights[10]; - _weights[12] = _weights[9]; - _weights[13] = _weights[8]; - _weights[14] = _weights[7]; - _weights[15] = _weights[6]; - _weights[16] = _weights[5]; - _weights[17] = _weights[4]; - _weights[18] = _weights[3]; - _weights[19] = _weights[2]; - _weights[20] = _weights[1]; - _weights[21] = _weights[0]; + pts.resize (22); + wts.resize(22); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.8415243845764617655228962221207e-01_R; + pts[ 2] = -9.4720428399922868052421376661573e-01_R; + pts[ 3] = -8.9006229019090447052965782577909e-01_R; + pts[ 4] = -8.1394892761192113604544184805614e-01_R; + pts[ 5] = -7.2048723996120215811988189639847e-01_R; + pts[ 6] = -6.1166943828425897122621160586993e-01_R; + pts[ 7] = -4.8981487518990234980875123568327e-01_R; + pts[ 8] = -3.5752071013891953806095728024018e-01_R; + pts[ 9] = -2.1760658515928504178795509346539e-01_R; + pts[10] = -7.3054540010898334761088790464107e-02_R; + pts[11] = -pts[10]; + pts[12] = -pts[9]; + pts[13] = -pts[8]; + pts[14] = -pts[7]; + pts[15] = -pts[6]; + pts[16] = -pts[5]; + pts[17] = -pts[4]; + pts[18] = -pts[3]; + pts[19] = -pts[2]; + pts[20] = -pts[1]; + pts[21] = -pts[0]; + + wts[ 0] = 4.3290043290043290043290043290043e-03_R; + wts[ 1] = 2.6545747682501757911627904520543e-02_R; + wts[ 2] = 4.7214465293740752123775734864792e-02_R; + wts[ 3] = 6.6865605864553076012404194157097e-02_R; + wts[ 4] = 8.5090060391838447815711236095748e-02_R; + wts[ 5] = 1.0150057480164767437243730374960e-01_R; + wts[ 6] = 1.1574764465393906659003636772146e-01_R; + wts[ 7] = 1.2752769665343027553084445930883e-01_R; + wts[ 8] = 1.3658968861374142668617736220617e-01_R; + wts[ 9] = 1.4274049227136140033623599356679e-01_R; + wts[10] = 1.4584901944424179361642043947997e-01_R; + wts[11] = wts[10]; + wts[12] = wts[9]; + wts[13] = wts[8]; + wts[14] = wts[7]; + wts[15] = wts[6]; + wts[16] = wts[5]; + wts[17] = wts[4]; + wts[18] = wts[3]; + wts[19] = wts[2]; + wts[20] = wts[1]; + wts[21] = wts[0]; return; } @@ -795,62 +807,131 @@ void QGaussLobatto::init_1D() case FORTYSECOND: case FORTYTHIRD: { - _points.resize (23); - _weights.resize(23); - - _points[ 0](0) = -1.0000000000000000000000000000000e+00_R; - _points[ 1](0) = -9.8552715587873257808146276673810e-01_R; - _points[ 2](0) = -9.5175795571071020413563967985143e-01_R; - _points[ 3](0) = -8.9945855804034501095016032034737e-01_R; - _points[ 4](0) = -8.2965109665128588622320061929000e-01_R; - _points[ 5](0) = -7.4369504117206068394516354306700e-01_R; - _points[ 6](0) = -6.4326364446013620847614553360277e-01_R; - _points[ 7](0) = -5.3031177113684416813011532015230e-01_R; - _points[ 8](0) = -4.0703793791447482919595048821510e-01_R; - _points[ 9](0) = -2.7584154894579306710687763267914e-01_R; - _points[10](0) = -1.3927620404066839859186261298277e-01_R; - _points[11](0) = 0.; - _points[12] = -_points[10]; - _points[13] = -_points[9]; - _points[14] = -_points[8]; - _points[15] = -_points[7]; - _points[16] = -_points[6]; - _points[17] = -_points[5]; - _points[18] = -_points[4]; - _points[19] = -_points[3]; - _points[20] = -_points[2]; - _points[21] = -_points[1]; - _points[22] = -_points[0]; - - _weights[ 0] = 3.9525691699604743083003952569170e-03_R; - _weights[ 1] = 2.4248600771531736517399658937097e-02_R; - _weights[ 2] = 4.3175871170241834748876465612042e-02_R; - _weights[ 3] = 6.1252477129554206381382847440355e-02_R; - _weights[ 4] = 7.8135449475569989741934255347965e-02_R; - _weights[ 5] = 9.3497246163512341833500706906697e-02_R; - _weights[ 6] = 1.0703910172433651153518362791547e-01_R; - _weights[ 7] = 1.1849751066274913130212600472426e-01_R; - _weights[ 8] = 1.2764947470175887663614855305567e-01_R; - _weights[ 9] = 1.3431687263860381990156489770071e-01_R; - _weights[10] = 1.3836993638580739452350273386294e-01_R; - _weights[11] = 1.3972978001274736514015970647975e-01_R; - _weights[12] = _weights[10]; - _weights[13] = _weights[9]; - _weights[14] = _weights[8]; - _weights[15] = _weights[7]; - _weights[16] = _weights[6]; - _weights[17] = _weights[5]; - _weights[18] = _weights[4]; - _weights[19] = _weights[3]; - _weights[20] = _weights[2]; - _weights[21] = _weights[1]; - _weights[22] = _weights[0]; + pts.resize (23); + wts.resize(23); + + pts[ 0] = -1.0000000000000000000000000000000e+00_R; + pts[ 1] = -9.8552715587873257808146276673810e-01_R; + pts[ 2] = -9.5175795571071020413563967985143e-01_R; + pts[ 3] = -8.9945855804034501095016032034737e-01_R; + pts[ 4] = -8.2965109665128588622320061929000e-01_R; + pts[ 5] = -7.4369504117206068394516354306700e-01_R; + pts[ 6] = -6.4326364446013620847614553360277e-01_R; + pts[ 7] = -5.3031177113684416813011532015230e-01_R; + pts[ 8] = -4.0703793791447482919595048821510e-01_R; + pts[ 9] = -2.7584154894579306710687763267914e-01_R; + pts[10] = -1.3927620404066839859186261298277e-01_R; + pts[11] = 0.; + pts[12] = -pts[10]; + pts[13] = -pts[9]; + pts[14] = -pts[8]; + pts[15] = -pts[7]; + pts[16] = -pts[6]; + pts[17] = -pts[5]; + pts[18] = -pts[4]; + pts[19] = -pts[3]; + pts[20] = -pts[2]; + pts[21] = -pts[1]; + pts[22] = -pts[0]; + + wts[ 0] = 3.9525691699604743083003952569170e-03_R; + wts[ 1] = 2.4248600771531736517399658937097e-02_R; + wts[ 2] = 4.3175871170241834748876465612042e-02_R; + wts[ 3] = 6.1252477129554206381382847440355e-02_R; + wts[ 4] = 7.8135449475569989741934255347965e-02_R; + wts[ 5] = 9.3497246163512341833500706906697e-02_R; + wts[ 6] = 1.0703910172433651153518362791547e-01_R; + wts[ 7] = 1.1849751066274913130212600472426e-01_R; + wts[ 8] = 1.2764947470175887663614855305567e-01_R; + wts[ 9] = 1.3431687263860381990156489770071e-01_R; + wts[10] = 1.3836993638580739452350273386294e-01_R; + wts[11] = 1.3972978001274736514015970647975e-01_R; + wts[12] = wts[10]; + wts[13] = wts[9]; + wts[14] = wts[8]; + wts[15] = wts[7]; + wts[16] = wts[6]; + wts[17] = wts[5]; + wts[18] = wts[4]; + wts[19] = wts[3]; + wts[20] = wts[2]; + wts[21] = wts[1]; + wts[22] = wts[0]; return; } default: - libmesh_error_msg("Quadrature rule " << _order << " not supported!"); + libmesh_error_msg("Quadrature rule " << order << " not supported!"); + } +} + +/// Every 1D rule the table above holds, built once and shared by all callers +struct Table1D +{ + std::array, QGaussLobatto::max_points_1D + 1> points, weights; + + Table1D() + { + for (unsigned int n = 2; n <= QGaussLobatto::max_points_1D; ++n) + fill_1D(static_cast(2 * n - 3), points[n], weights[n]); + } +}; + +const Table1D & table_1D() +{ + static const Table1D table; + return table; +} + +} // anonymous namespace + + +unsigned int QGaussLobatto::n_points_1D(const Order order) +{ + // The table pairs the orders 2n-4 and 2n-3 with the same n points, and there is no + // one-point rule, so the lowest orders share the two-point rule. + return static_cast(order) / 2 + 2; +} + + +const std::vector & QGaussLobatto::points_1D(const unsigned int n) +{ + libmesh_error_msg_if(n < 2 || n > max_points_1D, + "No " << n << " point Gauss-Lobatto rule is tabulated; " + "the rules run from 2 to " << max_points_1D << " points."); + + return table_1D().points[n]; +} + + +const std::vector & QGaussLobatto::weights_1D(const unsigned int n) +{ + libmesh_error_msg_if(n < 2 || n > max_points_1D, + "No " << n << " point Gauss-Lobatto rule is tabulated; " + "the rules run from 2 to " << max_points_1D << " points."); + + return table_1D().weights[n]; +} + + +void QGaussLobatto::init_1D() +{ + const unsigned int n = n_points_1D(get_order()); + + libmesh_error_msg_if(n > max_points_1D, + "Quadrature rule " << get_order() << " not supported!"); + + const std::vector & pts = points_1D(n); + const std::vector & wts = weights_1D(n); + + _points.resize (n); + _weights.resize(n); + + for (const auto i : index_range(pts)) + { + _points[i](0) = pts[i]; + _weights[i] = wts[i]; } } From 386de09e708887f617a95b5a672bd0dc0e554cd5 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Mon, 14 Sep 2026 17:03:59 -0700 Subject: [PATCH 18/27] Add the one-dimensional nodal basis on the Gauss-Lobatto points The basis of degree p interpolates at the p+1 Gauss-Lobatto points, which it reads from QGaussLobatto so that it is collocated with the rule of the same count. At one of its own points a shape function is one or zero and its derivatives are rows of the differentiation matrices the basis carries, so the values a collocated quadrature rule asks for cost nothing to produce. Away from them the barycentric form gives the value and its first two derivatives. The differentiation matrix is built from the ratios of the barycentric weights, with each diagonal entry the negation of the sum of its row, since the shape functions sum to one everywhere and so their derivatives sum to zero. That identity supplies the endpoint entries, -p(p+1)/4 and p(p+1)/4, without a case of their own. The second derivative matrix is the first applied twice, which is exact because the derivative of a polynomial of degree p has degree p-1 and this basis interpolates it exactly. The bases for every tabulated point count are built together on first use, a few thousand operations, so that reaching one needs no lock. Co-Authored-By: Claude --- include/fe/fe_lagrange_gll_shape_1D.h | 287 ++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 include/fe/fe_lagrange_gll_shape_1D.h diff --git a/include/fe/fe_lagrange_gll_shape_1D.h b/include/fe/fe_lagrange_gll_shape_1D.h new file mode 100644 index 00000000000..6e7cf6599c7 --- /dev/null +++ b/include/fe/fe_lagrange_gll_shape_1D.h @@ -0,0 +1,287 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +#ifndef LIBMESH_FE_LAGRANGE_GLL_SHAPE_1D_H +#define LIBMESH_FE_LAGRANGE_GLL_SHAPE_1D_H + +// Local includes +#include "libmesh/enum_order.h" +#include "libmesh/int_range.h" +#include "libmesh/quadrature_gauss_lobatto.h" + +// C++ includes +#include +#include + +// The one-dimensional nodal basis on the Gauss-Lobatto points, which the tensor product +// elements build their shape functions from. +// +// The interpolation points of this basis are the points of the Gauss-Lobatto rule of the +// same count, read from QGaussLobatto so that the two carry the same values. A basis and a +// quadrature rule that share their points are collocated: every shape function is one at +// its own point and zero at the others, so the mass matrix a collocated rule assembles is +// diagonal, for any mapping and any element shape. That property is exact only while the +// two agree bit for bit, which is why the points are shared rather than recomputed here. + +namespace libMesh +{ + +/** + * The one-dimensional nodal basis on \p n Gauss-Lobatto points, of degree n-1. + */ +struct GLLBasis1D +{ + /// The interpolation points, in ascending order, the first and last being -1 and 1 + std::vector nodes; + + /// The barycentric weights, the i'th being the reciprocal of \f$\prod_{j \neq i}(\xi_i - \xi_j)\f$ + std::vector weights; + + /// \p deriv[k][i] is the derivative of the i'th shape function at the k'th point + std::vector> deriv; + + /// \p second[k][i] is the second derivative of the i'th shape function at the k'th point + std::vector> second; +}; + + +/** + * \returns The one-dimensional nodal basis on \p n Gauss-Lobatto points. + */ +inline GLLBasis1D build_gll_basis_1D(const unsigned int n) +{ + GLLBasis1D b; + + b.nodes = QGaussLobatto::points_1D(n); + + b.weights.resize(n); + for (const auto i : make_range(n)) + { + Real product = 1.; + for (const auto j : make_range(n)) + if (j != i) + product *= b.nodes[i] - b.nodes[j]; + b.weights[i] = 1. / product; + } + + // Away from its own point the derivative of a shape function is the ratio of two + // barycentric weights over the distance between the points. At its own point it is minus + // the sum of the others in its row, since the shape functions sum to one everywhere and + // so their derivatives sum to zero. That identity gives the two endpoint entries, + // -p(p+1)/4 and p(p+1)/4, without a case of their own. + b.deriv.assign(n, std::vector(n, 0.)); + for (const auto k : make_range(n)) + { + Real row_sum = 0.; + for (const auto i : make_range(n)) + if (i != k) + { + b.deriv[k][i] = (b.weights[i] / b.weights[k]) / (b.nodes[k] - b.nodes[i]); + row_sum += b.deriv[k][i]; + } + b.deriv[k][k] = -row_sum; + } + + // The derivative of a polynomial of degree p is one of degree p-1, which this basis + // interpolates exactly, so applying the first derivative twice gives the second. + b.second.assign(n, std::vector(n, 0.)); + for (const auto k : make_range(n)) + for (const auto i : make_range(n)) + { + Real sum = 0.; + for (const auto m : make_range(n)) + sum += b.deriv[k][m] * b.deriv[m][i]; + b.second[k][i] = sum; + } + + return b; +} + +/** + * \returns The one-dimensional basis of degree \p order, built once and shared by all + * callers. + * + * The bases are built together on first use, which is a few thousand operations, so that + * no lock is needed to reach one. + */ +inline const GLLBasis1D & fe_lagrange_gll_1D_basis(const Order order) +{ + static const std::array bases = []() + { + std::array b; + for (unsigned int n = 2; n <= QGaussLobatto::max_points_1D; ++n) + b[n] = build_gll_basis_1D(n); + return b; + }(); + + const unsigned int n = static_cast(order) + 1; + + libmesh_error_msg_if(n < 2 || n > QGaussLobatto::max_points_1D, + "No Gauss-Lobatto nodal basis of order " << order << " is available; " + "the tabulated Gauss-Lobatto points run to " + << QGaussLobatto::max_points_1D << ", so the orders run from 1 to " + << QGaussLobatto::max_points_1D - 1 << "."); + + return bases[n]; +} + + +/** + * \returns The index of the point of \p b that sits at \p xi, or \p invalid_uint when \p xi + * is not one of them. + * + * The comparison is exact, and it holds for every point of a collocated quadrature rule + * because the basis and the rule read the same values from QGaussLobatto. + */ +inline unsigned int fe_lagrange_gll_1D_point(const GLLBasis1D & b, const Real xi) +{ + for (const auto i : index_range(b.nodes)) + if (b.nodes[i] == xi) + return cast_int(i); + + return invalid_uint; +} + +/** + * \returns The value of the \p i'th one-dimensional Gauss-Lobatto nodal shape function of + * degree \p order at \p xi. + * + * At one of the basis's own points the value is one or zero, which is the property a + * collocated quadrature rule rests on. Elsewhere the barycentric form gives it, whose + * numerator and denominator are the terms \f$w_j/(\xi - \xi_j)\f$ that the shape functions + * share. + */ +inline Real fe_lagrange_gll_1D_shape(const Order order, + const unsigned int i, + const Real xi) +{ + const GLLBasis1D & b = fe_lagrange_gll_1D_basis(order); + + libmesh_assert_less (i, b.nodes.size()); + + const unsigned int k = fe_lagrange_gll_1D_point(b, xi); + if (k != invalid_uint) + return (i == k) ? 1. : 0.; + + Real numerator = 0., denominator = 0.; + + for (const auto j : index_range(b.nodes)) + { + const Real term = b.weights[j] / (xi - b.nodes[j]); + + denominator += term; + + if (j == i) + numerator = term; + } + + return numerator / denominator; +} + +/** + * \returns The derivative of the \p i'th one-dimensional Gauss-Lobatto nodal shape function + * of degree \p order at \p xi. + * + * At one of the basis's own points this is a row of the differentiation matrix, which the + * basis carries. Elsewhere it follows from differentiating the barycentric form, as + * \f$\ell_i(\xi)\left[S_2/S_1 - 1/(\xi - \xi_i)\right]\f$ with + * \f$S_m = \sum_j w_j/(\xi-\xi_j)^m\f$. + */ +inline Real fe_lagrange_gll_1D_shape_deriv(const Order order, + const unsigned int i, + const unsigned int libmesh_dbg_var(j), + const Real xi) +{ + // only d()/dxi in 1D! + libmesh_assert_equal_to (j, 0); + + const GLLBasis1D & b = fe_lagrange_gll_1D_basis(order); + + libmesh_assert_less (i, b.nodes.size()); + + const unsigned int k = fe_lagrange_gll_1D_point(b, xi); + if (k != invalid_uint) + return b.deriv[k][i]; + + Real s1 = 0., s2 = 0., numerator = 0.; + + for (const auto m : index_range(b.nodes)) + { + const Real term = b.weights[m] / (xi - b.nodes[m]); + + s1 += term; + s2 += term / (xi - b.nodes[m]); + + if (m == i) + numerator = term; + } + + const Real value = numerator / s1; + + return value * (s2 / s1 - 1. / (xi - b.nodes[i])); +} + +/** + * \returns The second derivative of the \p i'th one-dimensional Gauss-Lobatto nodal shape + * function of degree \p order at \p xi. + * + * At one of the basis's own points this is a row of the second differentiation matrix. + * Elsewhere it follows from differentiating the barycentric form twice, as + * \f$2\ell_i(\xi)\left[1/d^2 - S_2/(d S_1) - S_3/S_1 + S_2^2/S_1^2\right]\f$ with + * \f$d = \xi - \xi_i\f$ and \f$S_m = \sum_j w_j/(\xi-\xi_j)^m\f$. + */ +inline Real fe_lagrange_gll_1D_shape_second_deriv(const Order order, + const unsigned int i, + const unsigned int libmesh_dbg_var(j), + const Real xi) +{ + // only d^2()/dxi^2 in 1D! + libmesh_assert_equal_to (j, 0); + + const GLLBasis1D & b = fe_lagrange_gll_1D_basis(order); + + libmesh_assert_less (i, b.nodes.size()); + + const unsigned int k = fe_lagrange_gll_1D_point(b, xi); + if (k != invalid_uint) + return b.second[k][i]; + + Real s1 = 0., s2 = 0., s3 = 0., numerator = 0.; + + for (const auto m : index_range(b.nodes)) + { + const Real d = xi - b.nodes[m]; + const Real term = b.weights[m] / d; + + s1 += term; + s2 += term / d; + s3 += term / (d * d); + + if (m == i) + numerator = term; + } + + const Real value = numerator / s1; + const Real d = xi - b.nodes[i]; + + return 2. * value * (1. / (d * d) - s2 / (d * s1) - s3 / s1 + (s2 * s2) / (s1 * s1)); +} + +} // namespace libMesh + +#endif // LIBMESH_FE_LAGRANGE_GLL_SHAPE_1D_H From 6df30dd801238a8f48c3ef597aa103ffdeb3c4c9 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 08:18:20 -0700 Subject: [PATCH 19/27] Add the L2_LAGRANGE_GLL family A nodal basis on the Gauss-Lobatto points, collocated with the Gauss-Lobatto rule of the same order: each shape function is one at its own point and zero at the others, so the mass matrix that rule assembles is diagonal, for any mapping and any element shape, and the values the rule asks for cost nothing to produce. The basis is a tensor product, so it lives on the tensor product element types alone. Every one of its degrees of freedom belongs to the element, which is what frees its order from the element's node count: a degree of freedom sits at a Gauss-Lobatto point, and past order two those are not nodes, so an order of eight runs on a plain QUAD4. The orders run from one to one less than the number of tabulated Gauss-Lobatto points, and asking beyond that says so. FEType::default_quadrature_rule returns the collocated rule, so a variable of this family is collocated without a caller arranging it. A rule of n points is exact through degree 2n-3, so the order yielding the p+1 points a basis of degree p interpolates at is 2p-1. That expression carries p refinement as well, since QBase raises a rule's order by twice the p_level it is initialized with and 2p-1 rises by two for each degree. Stiffness is still integrated exactly on an affine element, where the integrand has degree 2p-2 against the rule's 2p-1. The mass integrand has degree 2p, so it is the one term the rule does not reach, which is the trade that makes the matrix diagonal. Co-Authored-By: Claude --- Makefile.in | 415 ++++++++++++++++++++++++++++-- include/enums/enum_fe_family.h | 3 + include/fe/fe_macro.h | 2 + include/libmesh/Makefile.am | 5 + include/libmesh/Makefile.in | 8 +- src/fe/fe_abstract.C | 12 + src/fe/fe_base.C | 12 + src/fe/fe_boundary.C | 2 + src/fe/fe_interface.C | 28 ++ src/fe/fe_l2_lagrange_gll.C | 198 ++++++++++++++ src/fe/fe_lagrange_gll_shape_0D.C | 147 +++++++++++ src/fe/fe_lagrange_gll_shape_1D.C | 217 ++++++++++++++++ src/fe/fe_lagrange_gll_shape_2D.C | 217 ++++++++++++++++ src/fe/fe_lagrange_gll_shape_3D.C | 217 ++++++++++++++++ src/fe/fe_transformation_base.C | 1 + src/fe/fe_type.C | 17 ++ src/libmesh_SOURCES | 5 + src/utils/string_to_enum.C | 1 + 18 files changed, 1485 insertions(+), 22 deletions(-) create mode 100644 src/fe/fe_l2_lagrange_gll.C create mode 100644 src/fe/fe_lagrange_gll_shape_0D.C create mode 100644 src/fe/fe_lagrange_gll_shape_1D.C create mode 100644 src/fe/fe_lagrange_gll_shape_2D.C create mode 100644 src/fe/fe_lagrange_gll_shape_3D.C diff --git a/Makefile.in b/Makefile.in index 39c3eacf728..b64ad5b3f98 100644 --- a/Makefile.in +++ b/Makefile.in @@ -325,10 +325,14 @@ am__libmesh_dbg_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_hierarchic_shape_3D.C src/fe/fe_hierarchic_vec.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ - src/fe/fe_lagrange.C src/fe/fe_lagrange_shape_0D.C \ - src/fe/fe_lagrange_shape_1D.C src/fe/fe_lagrange_shape_2D.C \ - src/fe/fe_lagrange_shape_3D.C src/fe/fe_lagrange_vec.C \ - src/fe/fe_map.C src/fe/fe_monomial.C \ + src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll_shape_1D.C \ + src/fe/fe_lagrange_gll_shape_2D.C \ + src/fe/fe_lagrange_gll_shape_3D.C \ + src/fe/fe_lagrange_shape_0D.C src/fe/fe_lagrange_shape_1D.C \ + src/fe/fe_lagrange_shape_2D.C src/fe/fe_lagrange_shape_3D.C \ + src/fe/fe_lagrange_vec.C src/fe/fe_map.C src/fe/fe_monomial.C \ src/fe/fe_monomial_shape_0D.C src/fe/fe_monomial_shape_1D.C \ src/fe/fe_monomial_shape_2D.C src/fe/fe_monomial_shape_3D.C \ src/fe/fe_monomial_vec.C src/fe/fe_nedelec_one.C \ @@ -673,7 +677,12 @@ am__objects_1 = src/base/libmesh_dbg_la-dirichlet_boundary.lo \ src/fe/libmesh_dbg_la-fe_interface_inf_fe.lo \ src/fe/libmesh_dbg_la-fe_l2_hierarchic.lo \ src/fe/libmesh_dbg_la-fe_l2_lagrange.lo \ + src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_dbg_la-fe_lagrange.lo \ + src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo \ + src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo \ + src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo \ + src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_3D.lo \ src/fe/libmesh_dbg_la-fe_lagrange_shape_0D.lo \ src/fe/libmesh_dbg_la-fe_lagrange_shape_1D.lo \ src/fe/libmesh_dbg_la-fe_lagrange_shape_2D.lo \ @@ -1140,10 +1149,14 @@ am__libmesh_devel_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_hierarchic_shape_3D.C src/fe/fe_hierarchic_vec.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ - src/fe/fe_lagrange.C src/fe/fe_lagrange_shape_0D.C \ - src/fe/fe_lagrange_shape_1D.C src/fe/fe_lagrange_shape_2D.C \ - src/fe/fe_lagrange_shape_3D.C src/fe/fe_lagrange_vec.C \ - src/fe/fe_map.C src/fe/fe_monomial.C \ + src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll_shape_1D.C \ + src/fe/fe_lagrange_gll_shape_2D.C \ + src/fe/fe_lagrange_gll_shape_3D.C \ + src/fe/fe_lagrange_shape_0D.C src/fe/fe_lagrange_shape_1D.C \ + src/fe/fe_lagrange_shape_2D.C src/fe/fe_lagrange_shape_3D.C \ + src/fe/fe_lagrange_vec.C src/fe/fe_map.C src/fe/fe_monomial.C \ src/fe/fe_monomial_shape_0D.C src/fe/fe_monomial_shape_1D.C \ src/fe/fe_monomial_shape_2D.C src/fe/fe_monomial_shape_3D.C \ src/fe/fe_monomial_vec.C src/fe/fe_nedelec_one.C \ @@ -1487,7 +1500,12 @@ am__objects_2 = src/base/libmesh_devel_la-dirichlet_boundary.lo \ src/fe/libmesh_devel_la-fe_interface_inf_fe.lo \ src/fe/libmesh_devel_la-fe_l2_hierarchic.lo \ src/fe/libmesh_devel_la-fe_l2_lagrange.lo \ + src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_devel_la-fe_lagrange.lo \ + src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo \ + src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo \ + src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo \ + src/fe/libmesh_devel_la-fe_lagrange_gll_shape_3D.lo \ src/fe/libmesh_devel_la-fe_lagrange_shape_0D.lo \ src/fe/libmesh_devel_la-fe_lagrange_shape_1D.lo \ src/fe/libmesh_devel_la-fe_lagrange_shape_2D.lo \ @@ -1951,10 +1969,14 @@ am__libmesh_oprof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_hierarchic_shape_3D.C src/fe/fe_hierarchic_vec.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ - src/fe/fe_lagrange.C src/fe/fe_lagrange_shape_0D.C \ - src/fe/fe_lagrange_shape_1D.C src/fe/fe_lagrange_shape_2D.C \ - src/fe/fe_lagrange_shape_3D.C src/fe/fe_lagrange_vec.C \ - src/fe/fe_map.C src/fe/fe_monomial.C \ + src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll_shape_1D.C \ + src/fe/fe_lagrange_gll_shape_2D.C \ + src/fe/fe_lagrange_gll_shape_3D.C \ + src/fe/fe_lagrange_shape_0D.C src/fe/fe_lagrange_shape_1D.C \ + src/fe/fe_lagrange_shape_2D.C src/fe/fe_lagrange_shape_3D.C \ + src/fe/fe_lagrange_vec.C src/fe/fe_map.C src/fe/fe_monomial.C \ src/fe/fe_monomial_shape_0D.C src/fe/fe_monomial_shape_1D.C \ src/fe/fe_monomial_shape_2D.C src/fe/fe_monomial_shape_3D.C \ src/fe/fe_monomial_vec.C src/fe/fe_nedelec_one.C \ @@ -2298,7 +2320,12 @@ am__objects_3 = src/base/libmesh_oprof_la-dirichlet_boundary.lo \ src/fe/libmesh_oprof_la-fe_interface_inf_fe.lo \ src/fe/libmesh_oprof_la-fe_l2_hierarchic.lo \ src/fe/libmesh_oprof_la-fe_l2_lagrange.lo \ + src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_oprof_la-fe_lagrange.lo \ + src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo \ + src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo \ + src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo \ + src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_3D.lo \ src/fe/libmesh_oprof_la-fe_lagrange_shape_0D.lo \ src/fe/libmesh_oprof_la-fe_lagrange_shape_1D.lo \ src/fe/libmesh_oprof_la-fe_lagrange_shape_2D.lo \ @@ -2762,10 +2789,14 @@ am__libmesh_opt_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_hierarchic_shape_3D.C src/fe/fe_hierarchic_vec.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ - src/fe/fe_lagrange.C src/fe/fe_lagrange_shape_0D.C \ - src/fe/fe_lagrange_shape_1D.C src/fe/fe_lagrange_shape_2D.C \ - src/fe/fe_lagrange_shape_3D.C src/fe/fe_lagrange_vec.C \ - src/fe/fe_map.C src/fe/fe_monomial.C \ + src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll_shape_1D.C \ + src/fe/fe_lagrange_gll_shape_2D.C \ + src/fe/fe_lagrange_gll_shape_3D.C \ + src/fe/fe_lagrange_shape_0D.C src/fe/fe_lagrange_shape_1D.C \ + src/fe/fe_lagrange_shape_2D.C src/fe/fe_lagrange_shape_3D.C \ + src/fe/fe_lagrange_vec.C src/fe/fe_map.C src/fe/fe_monomial.C \ src/fe/fe_monomial_shape_0D.C src/fe/fe_monomial_shape_1D.C \ src/fe/fe_monomial_shape_2D.C src/fe/fe_monomial_shape_3D.C \ src/fe/fe_monomial_vec.C src/fe/fe_nedelec_one.C \ @@ -3109,7 +3140,12 @@ am__objects_4 = src/base/libmesh_opt_la-dirichlet_boundary.lo \ src/fe/libmesh_opt_la-fe_interface_inf_fe.lo \ src/fe/libmesh_opt_la-fe_l2_hierarchic.lo \ src/fe/libmesh_opt_la-fe_l2_lagrange.lo \ + src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_opt_la-fe_lagrange.lo \ + src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo \ + src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo \ + src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo \ + src/fe/libmesh_opt_la-fe_lagrange_gll_shape_3D.lo \ src/fe/libmesh_opt_la-fe_lagrange_shape_0D.lo \ src/fe/libmesh_opt_la-fe_lagrange_shape_1D.lo \ src/fe/libmesh_opt_la-fe_lagrange_shape_2D.lo \ @@ -3572,10 +3608,14 @@ am__libmesh_prof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_hierarchic_shape_3D.C src/fe/fe_hierarchic_vec.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ - src/fe/fe_lagrange.C src/fe/fe_lagrange_shape_0D.C \ - src/fe/fe_lagrange_shape_1D.C src/fe/fe_lagrange_shape_2D.C \ - src/fe/fe_lagrange_shape_3D.C src/fe/fe_lagrange_vec.C \ - src/fe/fe_map.C src/fe/fe_monomial.C \ + src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll_shape_1D.C \ + src/fe/fe_lagrange_gll_shape_2D.C \ + src/fe/fe_lagrange_gll_shape_3D.C \ + src/fe/fe_lagrange_shape_0D.C src/fe/fe_lagrange_shape_1D.C \ + src/fe/fe_lagrange_shape_2D.C src/fe/fe_lagrange_shape_3D.C \ + src/fe/fe_lagrange_vec.C src/fe/fe_map.C src/fe/fe_monomial.C \ src/fe/fe_monomial_shape_0D.C src/fe/fe_monomial_shape_1D.C \ src/fe/fe_monomial_shape_2D.C src/fe/fe_monomial_shape_3D.C \ src/fe/fe_monomial_vec.C src/fe/fe_nedelec_one.C \ @@ -3919,7 +3959,12 @@ am__objects_5 = src/base/libmesh_prof_la-dirichlet_boundary.lo \ src/fe/libmesh_prof_la-fe_interface_inf_fe.lo \ src/fe/libmesh_prof_la-fe_l2_hierarchic.lo \ src/fe/libmesh_prof_la-fe_l2_lagrange.lo \ + src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_prof_la-fe_lagrange.lo \ + src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo \ + src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo \ + src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo \ + src/fe/libmesh_prof_la-fe_lagrange_gll_shape_3D.lo \ src/fe/libmesh_prof_la-fe_lagrange_shape_0D.lo \ src/fe/libmesh_prof_la-fe_lagrange_shape_1D.lo \ src/fe/libmesh_prof_la-fe_lagrange_shape_2D.lo \ @@ -5197,7 +5242,12 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_interface_inf_fe.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_hierarchic.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo \ + src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo \ + src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo \ + src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_3D.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_2D.Plo \ @@ -5285,7 +5335,12 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_interface_inf_fe.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_hierarchic.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo \ + src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo \ + src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo \ + src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_3D.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_2D.Plo \ @@ -5373,7 +5428,12 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_interface_inf_fe.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_hierarchic.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo \ + src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo \ + src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo \ + src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_3D.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_2D.Plo \ @@ -5461,7 +5521,12 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_interface_inf_fe.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_hierarchic.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo \ + src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo \ + src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo \ + src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_3D.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_2D.Plo \ @@ -5549,7 +5614,12 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_interface_inf_fe.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_hierarchic.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo \ + src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo \ + src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo \ + src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_3D.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_2D.Plo \ @@ -8149,7 +8219,12 @@ libmesh_SOURCES = \ src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C \ src/fe/fe_l2_lagrange.C \ + src/fe/fe_l2_lagrange_gll.C \ src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll_shape_1D.C \ + src/fe/fe_lagrange_gll_shape_2D.C \ + src/fe/fe_lagrange_gll_shape_3D.C \ src/fe/fe_lagrange_shape_0D.C \ src/fe/fe_lagrange_shape_1D.C \ src/fe/fe_lagrange_shape_2D.C \ @@ -9274,8 +9349,18 @@ src/fe/libmesh_dbg_la-fe_l2_hierarchic.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_dbg_la-fe_l2_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_dbg_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_3D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_dbg_la-fe_lagrange_shape_0D.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_dbg_la-fe_lagrange_shape_1D.lo: src/fe/$(am__dirstamp) \ @@ -10523,8 +10608,18 @@ src/fe/libmesh_devel_la-fe_l2_hierarchic.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_devel_la-fe_l2_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_devel_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_3D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_devel_la-fe_lagrange_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_devel_la-fe_lagrange_shape_1D.lo: \ @@ -11697,8 +11792,18 @@ src/fe/libmesh_oprof_la-fe_l2_hierarchic.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_oprof_la-fe_l2_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_oprof_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_3D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_oprof_la-fe_lagrange_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_oprof_la-fe_lagrange_shape_1D.lo: \ @@ -12871,8 +12976,18 @@ src/fe/libmesh_opt_la-fe_l2_hierarchic.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_opt_la-fe_l2_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_opt_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_3D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_opt_la-fe_lagrange_shape_0D.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_opt_la-fe_lagrange_shape_1D.lo: src/fe/$(am__dirstamp) \ @@ -14042,8 +14157,18 @@ src/fe/libmesh_prof_la-fe_l2_hierarchic.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_prof_la-fe_l2_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_prof_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_3D.lo: \ + src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_prof_la-fe_lagrange_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_prof_la-fe_lagrange_shape_1D.lo: \ @@ -15968,7 +16093,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_interface_inf_fe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_hierarchic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_3D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_2D.Plo@am__quote@ # am--include-marker @@ -16056,7 +16186,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_interface_inf_fe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_hierarchic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_3D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_2D.Plo@am__quote@ # am--include-marker @@ -16144,7 +16279,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_interface_inf_fe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_hierarchic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_3D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_2D.Plo@am__quote@ # am--include-marker @@ -16232,7 +16372,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_interface_inf_fe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_hierarchic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_3D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_2D.Plo@am__quote@ # am--include-marker @@ -16320,7 +16465,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_interface_inf_fe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_hierarchic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_3D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_2D.Plo@am__quote@ # am--include-marker @@ -18629,6 +18779,13 @@ src/fe/libmesh_dbg_la-fe_l2_lagrange.lo: src/fe/fe_l2_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_l2_lagrange.lo `test -f 'src/fe/fe_l2_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange.C +src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo: src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Tpo -c -o src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_l2_lagrange_gll.C' object='src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C + src/fe/libmesh_dbg_la-fe_lagrange.lo: src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo @@ -18636,6 +18793,34 @@ src/fe/libmesh_dbg_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_0D.C' object='src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C + +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo: src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_1D.C' object='src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C + +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo: src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_2D.C' object='src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C + +src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_3D.lo: src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_3D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_3D.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_3D.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_3D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_3D.C' object='src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_3D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C + src/fe/libmesh_dbg_la-fe_lagrange_shape_0D.lo: src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_0D.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange_shape_0D.lo `test -f 'src/fe/fe_lagrange_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_0D.Plo @@ -21961,6 +22146,13 @@ src/fe/libmesh_devel_la-fe_l2_lagrange.lo: src/fe/fe_l2_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_l2_lagrange.lo `test -f 'src/fe/fe_l2_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange.C +src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo: src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Tpo -c -o src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_l2_lagrange_gll.C' object='src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C + src/fe/libmesh_devel_la-fe_lagrange.lo: src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo @@ -21968,6 +22160,34 @@ src/fe/libmesh_devel_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_0D.C' object='src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C + +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo: src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_1D.C' object='src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C + +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo: src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_2D.C' object='src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C + +src/fe/libmesh_devel_la-fe_lagrange_gll_shape_3D.lo: src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange_gll_shape_3D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_3D.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_3D.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_3D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_3D.C' object='src/fe/libmesh_devel_la-fe_lagrange_gll_shape_3D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C + src/fe/libmesh_devel_la-fe_lagrange_shape_0D.lo: src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_0D.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange_shape_0D.lo `test -f 'src/fe/fe_lagrange_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_0D.Plo @@ -25293,6 +25513,13 @@ src/fe/libmesh_oprof_la-fe_l2_lagrange.lo: src/fe/fe_l2_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_l2_lagrange.lo `test -f 'src/fe/fe_l2_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange.C +src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo: src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Tpo -c -o src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_l2_lagrange_gll.C' object='src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C + src/fe/libmesh_oprof_la-fe_lagrange.lo: src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo @@ -25300,6 +25527,34 @@ src/fe/libmesh_oprof_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_0D.C' object='src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C + +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo: src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_1D.C' object='src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C + +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo: src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_2D.C' object='src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C + +src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_3D.lo: src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_3D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_3D.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_3D.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_3D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_3D.C' object='src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_3D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C + src/fe/libmesh_oprof_la-fe_lagrange_shape_0D.lo: src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_0D.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange_shape_0D.lo `test -f 'src/fe/fe_lagrange_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_0D.Plo @@ -28625,6 +28880,13 @@ src/fe/libmesh_opt_la-fe_l2_lagrange.lo: src/fe/fe_l2_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_l2_lagrange.lo `test -f 'src/fe/fe_l2_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange.C +src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo: src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Tpo -c -o src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_l2_lagrange_gll.C' object='src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C + src/fe/libmesh_opt_la-fe_lagrange.lo: src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo @@ -28632,6 +28894,34 @@ src/fe/libmesh_opt_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_0D.C' object='src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C + +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo: src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_1D.C' object='src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C + +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo: src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_2D.C' object='src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C + +src/fe/libmesh_opt_la-fe_lagrange_gll_shape_3D.lo: src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange_gll_shape_3D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_3D.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_3D.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_3D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_3D.C' object='src/fe/libmesh_opt_la-fe_lagrange_gll_shape_3D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C + src/fe/libmesh_opt_la-fe_lagrange_shape_0D.lo: src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_0D.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange_shape_0D.lo `test -f 'src/fe/fe_lagrange_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_0D.Plo @@ -31957,6 +32247,13 @@ src/fe/libmesh_prof_la-fe_l2_lagrange.lo: src/fe/fe_l2_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_l2_lagrange.lo `test -f 'src/fe/fe_l2_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange.C +src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo: src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Tpo -c -o src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_l2_lagrange_gll.C' object='src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo `test -f 'src/fe/fe_l2_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_l2_lagrange_gll.C + src/fe/libmesh_prof_la-fe_lagrange.lo: src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo @@ -31964,6 +32261,34 @@ src/fe/libmesh_prof_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_0D.C' object='src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C + +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo: src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_1D.C' object='src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo `test -f 'src/fe/fe_lagrange_gll_shape_1D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_1D.C + +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo: src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_2D.C' object='src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo `test -f 'src/fe/fe_lagrange_gll_shape_2D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_2D.C + +src/fe/libmesh_prof_la-fe_lagrange_gll_shape_3D.lo: src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange_gll_shape_3D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_3D.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_3D.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_3D.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll_shape_3D.C' object='src/fe/libmesh_prof_la-fe_lagrange_gll_shape_3D.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_3D.lo `test -f 'src/fe/fe_lagrange_gll_shape_3D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_3D.C + src/fe/libmesh_prof_la-fe_lagrange_shape_0D.lo: src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_0D.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange_shape_0D.lo `test -f 'src/fe/fe_lagrange_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_0D.Plo @@ -36723,7 +37048,12 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_2D.Plo @@ -36811,7 +37141,12 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_2D.Plo @@ -36899,7 +37234,12 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_2D.Plo @@ -36987,7 +37327,12 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_2D.Plo @@ -37075,7 +37420,12 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_2D.Plo @@ -39234,7 +39584,12 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_shape_2D.Plo @@ -39322,7 +39677,12 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_shape_2D.Plo @@ -39410,7 +39770,12 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_shape_2D.Plo @@ -39498,7 +39863,12 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_shape_2D.Plo @@ -39586,7 +39956,12 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_interface_inf_fe.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_hierarchic.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_3D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_shape_2D.Plo diff --git a/include/enums/enum_fe_family.h b/include/enums/enum_fe_family.h index 193bd056c4c..0de87c3a3b6 100644 --- a/include/enums/enum_fe_family.h +++ b/include/enums/enum_fe_family.h @@ -69,6 +69,9 @@ enum FEFamily : int { RATIONAL_BERNSTEIN = 61, // Side-supported basis functions SIDE_HIERARCHIC = 71, + // Nodal basis functions on the Gauss-Lobatto points, which are + // collocated with the Gauss-Lobatto quadrature rule of the same order + L2_LAGRANGE_GLL = 81, // Invalid INVALID_FE = 99}; diff --git a/include/fe/fe_macro.h b/include/fe/fe_macro.h index 1bbb5f08d3c..3b1b0d90789 100644 --- a/include/fe/fe_macro.h +++ b/include/fe/fe_macro.h @@ -80,6 +80,7 @@ template class LIBMESH_EXPORT FE< (_dim), LAGRANGE_VEC>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_VEC>; \ + template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_GLL>; \ template class LIBMESH_EXPORT FE< (_dim), MONOMIAL>; \ template class LIBMESH_EXPORT FE< (_dim), SCALAR>; \ template class LIBMESH_EXPORT FE< (_dim), SIDE_HIERARCHIC>; \ @@ -102,6 +103,7 @@ template class LIBMESH_EXPORT FE< (_dim), LAGRANGE_VEC>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_VEC>; \ + template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_GLL>; \ template class LIBMESH_EXPORT FE< (_dim), MONOMIAL>; \ template class LIBMESH_EXPORT FE< (_dim), SCALAR>; \ template class LIBMESH_EXPORT FE< (_dim), SIDE_HIERARCHIC>; \ diff --git a/include/libmesh/Makefile.am b/include/libmesh/Makefile.am index b3eb689f91c..3d9e3000f96 100644 --- a/include/libmesh/Makefile.am +++ b/include/libmesh/Makefile.am @@ -78,6 +78,7 @@ BUILT_SOURCES = \ fe_compute_data.h \ fe_interface.h \ fe_interface_macros.h \ + fe_lagrange_gll_shape_1D.h \ fe_lagrange_shape_1D.h \ fe_macro.h \ fe_map.h \ @@ -843,6 +844,9 @@ fe_interface.h: $(top_srcdir)/include/fe/fe_interface.h fe_interface_macros.h: $(top_srcdir)/include/fe/fe_interface_macros.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +fe_lagrange_gll_shape_1D.h: $(top_srcdir)/include/fe/fe_lagrange_gll_shape_1D.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + fe_lagrange_shape_1D.h: $(top_srcdir)/include/fe/fe_lagrange_shape_1D.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ @@ -2174,3 +2178,4 @@ xdr_cxx.h: $(top_srcdir)/include/utils/xdr_cxx.h parallel_communicator_specializations: $(top_srcdir)/include/timpi_shims/parallel_communicator_specializations $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index b2f773c1b6c..1905073fef8 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -573,8 +573,9 @@ BUILT_SOURCES = dirichlet_boundaries.h dof_map.h dof_map_base.h \ uniform_refinement_estimator.h \ weighted_patch_recovery_error_estimator.h fe.h fe_abstract.h \ fe_base.h fe_compute_data.h fe_interface.h \ - fe_interface_macros.h fe_lagrange_shape_1D.h fe_macro.h \ - fe_map.h fe_transformation_base.h fe_type.h fe_xyz_map.h \ + fe_interface_macros.h fe_lagrange_gll_shape_1D.h \ + fe_lagrange_shape_1D.h fe_macro.h fe_map.h \ + fe_transformation_base.h fe_type.h fe_xyz_map.h \ h1_fe_transformation.h hcurl_fe_transformation.h \ hdiv_fe_transformation.h inf_fe.h inf_fe_instantiate_1D.h \ inf_fe_instantiate_2D.h inf_fe_instantiate_3D.h inf_fe_macro.h \ @@ -1191,6 +1192,9 @@ fe_interface.h: $(top_srcdir)/include/fe/fe_interface.h fe_interface_macros.h: $(top_srcdir)/include/fe/fe_interface_macros.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +fe_lagrange_gll_shape_1D.h: $(top_srcdir)/include/fe/fe_lagrange_gll_shape_1D.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + fe_lagrange_shape_1D.h: $(top_srcdir)/include/fe/fe_lagrange_shape_1D.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/src/fe/fe_abstract.C b/src/fe/fe_abstract.C index 74c4ffe05ed..e207ce348a9 100644 --- a/src/fe/fe_abstract.C +++ b/src/fe/fe_abstract.C @@ -100,6 +100,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); @@ -177,6 +180,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); @@ -256,6 +262,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); @@ -335,6 +344,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); diff --git a/src/fe/fe_base.C b/src/fe/fe_base.C index 9411288c8c2..db9145feadd 100644 --- a/src/fe/fe_base.C +++ b/src/fe/fe_base.C @@ -210,6 +210,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); @@ -260,6 +263,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); @@ -312,6 +318,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); @@ -367,6 +376,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE: return std::make_unique>(fet); + case L2_LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); diff --git a/src/fe/fe_boundary.C b/src/fe/fe_boundary.C index 7ddb3250959..2e9e1e93a40 100644 --- a/src/fe/fe_boundary.C +++ b/src/fe/fe_boundary.C @@ -79,6 +79,7 @@ LIBMESH_ERRORS_IN_LOW_D(L2_HIERARCHIC_VEC) LIBMESH_ERRORS_IN_LOW_D(SIDE_HIERARCHIC) LIBMESH_ERRORS_IN_LOW_D(LAGRANGE) LIBMESH_ERRORS_IN_LOW_D(L2_LAGRANGE) +LIBMESH_ERRORS_IN_LOW_D(L2_LAGRANGE_GLL) LIBMESH_ERRORS_IN_LOW_D(LAGRANGE_VEC) LIBMESH_ERRORS_IN_LOW_D(L2_LAGRANGE_VEC) LIBMESH_ERRORS_IN_LOW_D(MONOMIAL) @@ -1164,6 +1165,7 @@ template LIBMESH_EXPORT void FE<3,_type>::edge_reinit(Elem const *, unsigned int REINIT_AND_SIDE_MAPS(LAGRANGE); REINIT_AND_SIDE_MAPS(LAGRANGE_VEC); REINIT_AND_SIDE_MAPS(L2_LAGRANGE); +REINIT_AND_SIDE_MAPS(L2_LAGRANGE_GLL); REINIT_AND_SIDE_MAPS(L2_LAGRANGE_VEC); REINIT_AND_SIDE_MAPS(HIERARCHIC); REINIT_AND_SIDE_MAPS(HIERARCHIC_VEC); diff --git a/src/fe/fe_interface.C b/src/fe/fe_interface.C index 7dfc8bc0ddd..b18e28d5198 100644 --- a/src/fe/fe_interface.C +++ b/src/fe/fe_interface.C @@ -19,6 +19,7 @@ // Local includes #include "libmesh/fe_interface.h" +#include "libmesh/quadrature_gauss_lobatto.h" #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS #include "libmesh/fe_interface_macros.h" @@ -94,6 +95,7 @@ FEInterface::is_InfFE_elem(const ElemType et) fe_family_case_func(SIDE_HIERARCHIC, dim, func_and_args, prefix, suffix) \ fe_family_case_func(LAGRANGE, dim, func_and_args, prefix, suffix) \ fe_family_case_func(L2_LAGRANGE, dim, func_and_args, prefix, suffix) \ + fe_family_case_func(L2_LAGRANGE_GLL, dim, func_and_args, prefix, suffix) \ fe_family_case_func(MONOMIAL, dim, func_and_args, prefix, suffix) \ fe_family_case_func(SCALAR, dim, func_and_args, prefix, suffix) \ fe_family_case_func(XYZ, dim, func_and_args, prefix, suffix) \ @@ -108,6 +110,7 @@ FEInterface::is_InfFE_elem(const ElemType et) fe_family_case(SIDE_HIERARCHIC) \ fe_family_case(LAGRANGE) \ fe_family_case(L2_LAGRANGE) \ + fe_family_case(L2_LAGRANGE_GLL) \ fe_family_case(MONOMIAL) \ fe_family_case(SCALAR) \ fe_family_case(XYZ) \ @@ -2200,6 +2203,28 @@ unsigned int FEInterface::max_order(const FEType & fe_t, return unknown; } break; + case L2_LAGRANGE_GLL: + switch (el_t) + { + case EDGE2: + case EDGE3: + case EDGE4: + case QUAD4: + case QUADSHELL4: + case QUAD8: + case QUADSHELL8: + case QUAD9: + case QUADSHELL9: + case HEX8: + case HEX20: + case HEX27: + // A basis of degree p interpolates at p+1 Gauss-Lobatto points, and the points + // are tabulated up to QGaussLobatto::max_points_1D of them + return QGaussLobatto::max_points_1D - 1; + default: + return unknown; + } + break; case MONOMIAL: case L2_LAGRANGE: case L2_LAGRANGE_VEC: @@ -2617,6 +2642,7 @@ bool FEInterface::extra_hanging_dofs(const FEType & fe_t) { case LAGRANGE: case L2_LAGRANGE: + case L2_LAGRANGE_GLL: case MONOMIAL: case MONOMIAL_VEC: case L2_HIERARCHIC: @@ -2707,6 +2733,7 @@ FEInterface::is_hierarchic (const FEType & fe_type) case LAGRANGE: case LAGRANGE_VEC: case L2_LAGRANGE: + case L2_LAGRANGE_GLL: case L2_LAGRANGE_VEC: case NEDELEC_ONE: case RATIONAL_BERNSTEIN: @@ -2732,6 +2759,7 @@ FEContinuity FEInterface::get_continuity(const FEType & fe_type) case MONOMIAL_VEC: case L2_HIERARCHIC: case L2_LAGRANGE: + case L2_LAGRANGE_GLL: case XYZ: case SCALAR: case L2_RAVIART_THOMAS: diff --git a/src/fe/fe_l2_lagrange_gll.C b/src/fe/fe_l2_lagrange_gll.C new file mode 100644 index 00000000000..5f446fefb66 --- /dev/null +++ b/src/fe/fe_l2_lagrange_gll.C @@ -0,0 +1,198 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + +// Local includes +#include "libmesh/elem.h" +#include "libmesh/enum_to_string.h" +#include "libmesh/fe.h" +#include "libmesh/fe_interface.h" +#include "libmesh/fe_macro.h" +#include "libmesh/quadrature_gauss_lobatto.h" + + +namespace libMesh +{ + +/** + * \returns The number of degrees of freedom that the L2_LAGRANGE_GLL basis of order \p o + * carries on an element of type \p t. + * + * The basis is a tensor product of one-dimensional bases, so it lives on the tensor + * product element types alone, and it carries \f$(p+1)^d\f$ degrees of freedom on one of + * those whatever its node count: every degree of freedom belongs to the element, so an + * order of eight asks nothing of the element beyond its shape. + */ +unsigned int l2_lagrange_gll_n_dofs(const ElemType t, const Order o) +{ + libmesh_assert_greater (o, 0); + + const unsigned int n = static_cast(o) + 1; + + libmesh_error_msg_if(n > QGaussLobatto::max_points_1D, + "The L2_LAGRANGE_GLL basis of order " << o << " would interpolate at " + << n << " Gauss-Lobatto points, and they are tabulated up to " + << QGaussLobatto::max_points_1D << "."); + + switch (t) + { + case NODEELEM: + return 1; + + case EDGE2: + case EDGE3: + case EDGE4: + return n; + + case QUAD4: + case QUADSHELL4: + case QUAD8: + case QUADSHELL8: + case QUAD9: + case QUADSHELL9: + return n*n; + + case HEX8: + case HEX20: + case HEX27: + return n*n*n; + + case INVALID_ELEM: + return 0; + + default: + libmesh_error_msg("The L2_LAGRANGE_GLL basis is a tensor product, so it has no form on " + << Utility::enum_to_string(t) << "."); + } +} + + +unsigned int l2_lagrange_gll_n_dofs(const Elem * e, const Order o) +{ + libmesh_assert(e); + return l2_lagrange_gll_n_dofs(e->type(), o); +} + +/** + * Evaluates a solution at the nodes of \p elem, for the writers that report a variable + * there. + * + * The interpolation points of this basis are the Gauss-Lobatto points, which are the nodes + * of the element only at orders one and two, so beyond those the values are interpolated + * at the nodes rather than read off the coefficients. + */ +void l2_lagrange_gll_nodal_soln(const Elem * elem, + const Order order, + const std::vector & elem_soln, + std::vector & nodal_soln, + const bool add_p_level) +{ + const unsigned int n_nodes = elem->n_nodes(); + + nodal_soln.resize(n_nodes); + + const FEType fe_type(order, L2_LAGRANGE_GLL); + + const unsigned int n_sf = + FEInterface::n_shape_functions(fe_type, elem, add_p_level); + + std::vector refspace_nodes; + FEBase::get_refspace_nodes(elem->type(), refspace_nodes); + libmesh_assert_equal_to (refspace_nodes.size(), n_nodes); + libmesh_assert_equal_to (elem_soln.size(), n_sf); + + std::fill(nodal_soln.begin(), nodal_soln.end(), 0); + + for (const auto n : make_range(n_nodes)) + for (const auto i : make_range(n_sf)) + nodal_soln[n] += elem_soln[i] * + FEInterface::shape(fe_type, elem, i, refspace_nodes[n], add_p_level); +} + +LIBMESH_FE_NODAL_SOLN(L2_LAGRANGE_GLL, l2_lagrange_gll_nodal_soln) +LIBMESH_FE_SIDE_NODAL_SOLN(L2_LAGRANGE_GLL) + + +// Every degree of freedom of this basis belongs to the element +template <> unsigned int FE<0,L2_LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<1,L2_LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<2,L2_LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<3,L2_LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } + +template <> unsigned int FE<0,L2_LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return l2_lagrange_gll_n_dofs(e, o); } +template <> unsigned int FE<1,L2_LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return l2_lagrange_gll_n_dofs(e, o); } +template <> unsigned int FE<2,L2_LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return l2_lagrange_gll_n_dofs(e, o); } +template <> unsigned int FE<3,L2_LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return l2_lagrange_gll_n_dofs(e, o); } + +template <> unsigned int FE<0,L2_LAGRANGE_GLL>::n_dofs_at_node(const ElemType, const Order, const unsigned int) { return 0; } +template <> unsigned int FE<1,L2_LAGRANGE_GLL>::n_dofs_at_node(const ElemType, const Order, const unsigned int) { return 0; } +template <> unsigned int FE<2,L2_LAGRANGE_GLL>::n_dofs_at_node(const ElemType, const Order, const unsigned int) { return 0; } +template <> unsigned int FE<3,L2_LAGRANGE_GLL>::n_dofs_at_node(const ElemType, const Order, const unsigned int) { return 0; } + +template <> unsigned int FE<0,L2_LAGRANGE_GLL>::n_dofs_at_node(const Elem &, const Order, const unsigned int) { return 0; } +template <> unsigned int FE<1,L2_LAGRANGE_GLL>::n_dofs_at_node(const Elem &, const Order, const unsigned int) { return 0; } +template <> unsigned int FE<2,L2_LAGRANGE_GLL>::n_dofs_at_node(const Elem &, const Order, const unsigned int) { return 0; } +template <> unsigned int FE<3,L2_LAGRANGE_GLL>::n_dofs_at_node(const Elem &, const Order, const unsigned int) { return 0; } + +template <> unsigned int FE<0,L2_LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<1,L2_LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<2,L2_LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<3,L2_LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return l2_lagrange_gll_n_dofs(t, o); } + +template <> unsigned int FE<0,L2_LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return l2_lagrange_gll_n_dofs(&e, o); } +template <> unsigned int FE<1,L2_LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return l2_lagrange_gll_n_dofs(&e, o); } +template <> unsigned int FE<2,L2_LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return l2_lagrange_gll_n_dofs(&e, o); } +template <> unsigned int FE<3,L2_LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return l2_lagrange_gll_n_dofs(&e, o); } + + +template <> FEContinuity FE<0,L2_LAGRANGE_GLL>::get_continuity() const { return DISCONTINUOUS; } +template <> FEContinuity FE<1,L2_LAGRANGE_GLL>::get_continuity() const { return DISCONTINUOUS; } +template <> FEContinuity FE<2,L2_LAGRANGE_GLL>::get_continuity() const { return DISCONTINUOUS; } +template <> FEContinuity FE<3,L2_LAGRANGE_GLL>::get_continuity() const { return DISCONTINUOUS; } + +// A nodal basis is not hierarchic +template <> bool FE<0,L2_LAGRANGE_GLL>::is_hierarchic() const { return false; } +template <> bool FE<1,L2_LAGRANGE_GLL>::is_hierarchic() const { return false; } +template <> bool FE<2,L2_LAGRANGE_GLL>::is_hierarchic() const { return false; } +template <> bool FE<3,L2_LAGRANGE_GLL>::is_hierarchic() const { return false; } + +// The shape functions are the same on every element of a type +template <> bool FE<0,L2_LAGRANGE_GLL>::shapes_need_reinit() const { return false; } +template <> bool FE<1,L2_LAGRANGE_GLL>::shapes_need_reinit() const { return false; } +template <> bool FE<2,L2_LAGRANGE_GLL>::shapes_need_reinit() const { return false; } +template <> bool FE<3,L2_LAGRANGE_GLL>::shapes_need_reinit() const { return false; } + +// A DISCONTINUOUS basis shares nothing across a hanging node, so it constrains nothing +#ifdef LIBMESH_ENABLE_AMR +template <> +void FE<2,L2_LAGRANGE_GLL>::compute_constraints (DofConstraints &, + DofMap &, + const unsigned int, + const Elem *) +{ } + +template <> +void FE<3,L2_LAGRANGE_GLL>::compute_constraints (DofConstraints &, + DofMap &, + const unsigned int, + const Elem *) +{ } +#endif // LIBMESH_ENABLE_AMR + + +} // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_0D.C b/src/fe/fe_lagrange_gll_shape_0D.C new file mode 100644 index 00000000000..6a7cb0abe06 --- /dev/null +++ b/src/fe/fe_lagrange_gll_shape_0D.C @@ -0,0 +1,147 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + +// Local includes +#include "libmesh/fe.h" +#include "libmesh/elem.h" + + +namespace libMesh +{ + + +LIBMESH_DEFAULT_VECTORIZED_FE(0,L2_LAGRANGE_GLL) + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape(const ElemType, + const Order, + const unsigned int libmesh_dbg_var(i), + const Point &) +{ + libmesh_assert_less (i, 1); + return 1.; +} + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape(const Elem *, + const Order, + const unsigned int libmesh_dbg_var(i), + const Point &, + const bool) +{ + libmesh_assert_less (i, 1); + return 1.; +} + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape(const FEType, + const Elem *, + const unsigned int libmesh_dbg_var(i), + const Point &, + const bool) +{ + libmesh_assert_less (i, 1); + return 1.; +} + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape_deriv(const Elem *, + const Order, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape_deriv(const FEType, + const Elem *, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape_second_deriv(const Elem *, + const Order, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType, + const Elem *, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES + +} // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_1D.C b/src/fe/fe_lagrange_gll_shape_1D.C new file mode 100644 index 00000000000..6cb5ae76647 --- /dev/null +++ b/src/fe/fe_lagrange_gll_shape_1D.C @@ -0,0 +1,217 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +// Local includes +#include "libmesh/fe.h" +#include "libmesh/elem.h" +#include "libmesh/fe_lagrange_gll_shape_1D.h" + + +namespace libMesh +{ + +namespace { + +/** + * \returns The 1 dimensional tensor product of one-dimensional Gauss-Lobatto nodal + * shape functions, differentiated once in each coordinate that \p derivs names. + * + * The degrees of freedom of the L2_LAGRANGE_GLL basis all belong to the element, so the + * \p i'th runs over the points of the tensor grid in lexicographic order, the first + * coordinate varying fastest. + */ +Real tensor_shape(const Order order, + const unsigned int i, + const Point & p, + const unsigned int * const derivs, + const unsigned int n_derivs) +{ + const unsigned int n = static_cast(order) + 1; + + libmesh_assert_less (i, n); + + Real value = 1.; + unsigned int stride = 1; + + for (unsigned int d = 0; d != 1; ++d) + { + const unsigned int i_d = (i / stride) % n; + stride *= n; + + unsigned int n_d = 0; + for (unsigned int k = 0; k != n_derivs; ++k) + if (derivs[k] == d) + ++n_d; + + switch (n_d) + { + case 0: + value *= fe_lagrange_gll_1D_shape(order, i_d, p(d)); + break; + + case 1: + value *= fe_lagrange_gll_1D_shape_deriv(order, i_d, 0, p(d)); + break; + + default: + value *= fe_lagrange_gll_1D_shape_second_deriv(order, i_d, 0, p(d)); + break; + } + } + + return value; +} + +#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES +/// The coordinate pairs that the second derivative index runs over +const unsigned int second_deriv_pairs[1][2] = {{0, 0}}; +#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES + +} // anonymous namespace + + +LIBMESH_DEFAULT_VECTORIZED_FE(1,L2_LAGRANGE_GLL) + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape(const ElemType, + const Order order, + const unsigned int i, + const Point & p) +{ + return tensor_shape(order, i, p, nullptr, 0); +} + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape(const Elem * elem, + const Order order, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape(const FEType fet, + const Elem * elem, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p) +{ + libmesh_assert_less (j, 1); + + return tensor_shape(order, i, p, &j, 1); +} + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 1); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 1); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p) +{ + libmesh_assert_less (j, 1); + + return tensor_shape(order, i, p, second_deriv_pairs[j], 2); +} + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 1); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); +} + + +template <> +Real FE<1,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 1); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); +} + + +#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES + +} // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_2D.C b/src/fe/fe_lagrange_gll_shape_2D.C new file mode 100644 index 00000000000..5d346d72b2d --- /dev/null +++ b/src/fe/fe_lagrange_gll_shape_2D.C @@ -0,0 +1,217 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +// Local includes +#include "libmesh/fe.h" +#include "libmesh/elem.h" +#include "libmesh/fe_lagrange_gll_shape_1D.h" + + +namespace libMesh +{ + +namespace { + +/** + * \returns The 2 dimensional tensor product of one-dimensional Gauss-Lobatto nodal + * shape functions, differentiated once in each coordinate that \p derivs names. + * + * The degrees of freedom of the L2_LAGRANGE_GLL basis all belong to the element, so the + * \p i'th runs over the points of the tensor grid in lexicographic order, the first + * coordinate varying fastest. + */ +Real tensor_shape(const Order order, + const unsigned int i, + const Point & p, + const unsigned int * const derivs, + const unsigned int n_derivs) +{ + const unsigned int n = static_cast(order) + 1; + + libmesh_assert_less (i, n*n); + + Real value = 1.; + unsigned int stride = 1; + + for (unsigned int d = 0; d != 2; ++d) + { + const unsigned int i_d = (i / stride) % n; + stride *= n; + + unsigned int n_d = 0; + for (unsigned int k = 0; k != n_derivs; ++k) + if (derivs[k] == d) + ++n_d; + + switch (n_d) + { + case 0: + value *= fe_lagrange_gll_1D_shape(order, i_d, p(d)); + break; + + case 1: + value *= fe_lagrange_gll_1D_shape_deriv(order, i_d, 0, p(d)); + break; + + default: + value *= fe_lagrange_gll_1D_shape_second_deriv(order, i_d, 0, p(d)); + break; + } + } + + return value; +} + +#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES +/// The coordinate pairs that the second derivative index runs over +const unsigned int second_deriv_pairs[3][2] = {{0, 0}, {0, 1}, {1, 1}}; +#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES + +} // anonymous namespace + + +LIBMESH_DEFAULT_VECTORIZED_FE(2,L2_LAGRANGE_GLL) + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape(const ElemType, + const Order order, + const unsigned int i, + const Point & p) +{ + return tensor_shape(order, i, p, nullptr, 0); +} + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape(const Elem * elem, + const Order order, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape(const FEType fet, + const Elem * elem, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p) +{ + libmesh_assert_less (j, 2); + + return tensor_shape(order, i, p, &j, 1); +} + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 2); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 2); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p) +{ + libmesh_assert_less (j, 3); + + return tensor_shape(order, i, p, second_deriv_pairs[j], 2); +} + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 3); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); +} + + +template <> +Real FE<2,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 3); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); +} + + +#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES + +} // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_3D.C b/src/fe/fe_lagrange_gll_shape_3D.C new file mode 100644 index 00000000000..652eb8fe40c --- /dev/null +++ b/src/fe/fe_lagrange_gll_shape_3D.C @@ -0,0 +1,217 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +// Local includes +#include "libmesh/fe.h" +#include "libmesh/elem.h" +#include "libmesh/fe_lagrange_gll_shape_1D.h" + + +namespace libMesh +{ + +namespace { + +/** + * \returns The 3 dimensional tensor product of one-dimensional Gauss-Lobatto nodal + * shape functions, differentiated once in each coordinate that \p derivs names. + * + * The degrees of freedom of the L2_LAGRANGE_GLL basis all belong to the element, so the + * \p i'th runs over the points of the tensor grid in lexicographic order, the first + * coordinate varying fastest. + */ +Real tensor_shape(const Order order, + const unsigned int i, + const Point & p, + const unsigned int * const derivs, + const unsigned int n_derivs) +{ + const unsigned int n = static_cast(order) + 1; + + libmesh_assert_less (i, n*n*n); + + Real value = 1.; + unsigned int stride = 1; + + for (unsigned int d = 0; d != 3; ++d) + { + const unsigned int i_d = (i / stride) % n; + stride *= n; + + unsigned int n_d = 0; + for (unsigned int k = 0; k != n_derivs; ++k) + if (derivs[k] == d) + ++n_d; + + switch (n_d) + { + case 0: + value *= fe_lagrange_gll_1D_shape(order, i_d, p(d)); + break; + + case 1: + value *= fe_lagrange_gll_1D_shape_deriv(order, i_d, 0, p(d)); + break; + + default: + value *= fe_lagrange_gll_1D_shape_second_deriv(order, i_d, 0, p(d)); + break; + } + } + + return value; +} + +#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES +/// The coordinate pairs that the second derivative index runs over +const unsigned int second_deriv_pairs[6][2] = {{0, 0}, {0, 1}, {1, 1}, {0, 2}, {1, 2}, {2, 2}}; +#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES + +} // anonymous namespace + + +LIBMESH_DEFAULT_VECTORIZED_FE(3,L2_LAGRANGE_GLL) + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape(const ElemType, + const Order order, + const unsigned int i, + const Point & p) +{ + return tensor_shape(order, i, p, nullptr, 0); +} + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape(const Elem * elem, + const Order order, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape(const FEType fet, + const Elem * elem, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p) +{ + libmesh_assert_less (j, 3); + + return tensor_shape(order, i, p, &j, 1); +} + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 3); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 3); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p) +{ + libmesh_assert_less (j, 6); + + return tensor_shape(order, i, p, second_deriv_pairs[j], 2); +} + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 6); + + return tensor_shape(order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); +} + + +template <> +Real FE<3,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 6); + + return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); +} + + +#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES + +} // namespace libMesh diff --git a/src/fe/fe_transformation_base.C b/src/fe/fe_transformation_base.C index 0fb48dfdfc0..caeee5dbcfe 100644 --- a/src/fe/fe_transformation_base.C +++ b/src/fe/fe_transformation_base.C @@ -51,6 +51,7 @@ std::unique_ptr> FETransformationBase @@ -45,6 +46,22 @@ FEType::default_quadrature_rule (const unsigned int dim, if (family == SUBDIVISION) return std::make_unique(dim, static_cast(1 + extraorder)); + // The Gauss-Lobatto nodal bases interpolate at the points of the Gauss-Lobatto rule of + // their own order, so that rule is the one they are collocated with: it makes their mass + // matrix diagonal and asks nothing to evaluate their shape functions. A rule of n points + // is exact through degree 2n-3, so the order that yields the p+1 points a basis of degree + // p interpolates at is 2p-1. An extraorder carries past that, which buys accuracy on the + // integrands a Gauss-Lobatto rule of p+1 points does not reach and gives up collocation. + // + // A p refined element keeps the pairing: QBase raises the order of a rule by twice the + // p_level it is initialized with, and 2p-1 rises by two for each degree, so the rule on an + // element of level l carries the p+l+1 points that the basis of degree p+l interpolates at. + if (family == L2_LAGRANGE_GLL) + { + const int p = static_cast(order.get_order()); + return std::make_unique(dim, static_cast(2*p - 1 + extraorder)); + } + return std::make_unique(dim, static_cast(this->default_quadrature_order() + extraorder)); } diff --git a/src/libmesh_SOURCES b/src/libmesh_SOURCES index d73987f9168..95b89dc8942 100644 --- a/src/libmesh_SOURCES +++ b/src/libmesh_SOURCES @@ -65,7 +65,12 @@ libmesh_SOURCES = \ src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C \ src/fe/fe_l2_lagrange.C \ + src/fe/fe_l2_lagrange_gll.C \ src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll_shape_1D.C \ + src/fe/fe_lagrange_gll_shape_2D.C \ + src/fe/fe_lagrange_gll_shape_3D.C \ src/fe/fe_lagrange_shape_0D.C \ src/fe/fe_lagrange_shape_1D.C \ src/fe/fe_lagrange_shape_2D.C \ diff --git a/src/utils/string_to_enum.C b/src/utils/string_to_enum.C index 18e86cd1c6e..1d8609bd966 100644 --- a/src/utils/string_to_enum.C +++ b/src/utils/string_to_enum.C @@ -223,6 +223,7 @@ std::map fefamily_to_enum { {"LAGRANGE_VEC" , LAGRANGE_VEC}, {"L2_LAGRANGE" , L2_LAGRANGE}, {"L2_LAGRANGE_VEC" , L2_LAGRANGE_VEC}, + {"L2_LAGRANGE_GLL" , L2_LAGRANGE_GLL}, {"HIERARCHIC" , HIERARCHIC}, {"HIERARCHIC_VEC" , HIERARCHIC_VEC}, {"L2_HIERARCHIC" , L2_HIERARCHIC}, From d92cdc3863118fb1bd76347e28cddf042c804927 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 08:18:27 -0700 Subject: [PATCH 20/27] Test the L2_LAGRANGE_GLL family The existing FETest harness covers the family's shape functions, their first and second derivatives, and the interface reporting its degree of freedom counts, at orders one through four on the tensor product element types. The new FEGLLCollocationTest covers what is particular to this family: that the matrix of shape function values at the points of the family's own quadrature rule is the identity, and that the mass matrix that rule assembles is diagonal, carrying the weight of each point times the Jacobian there. Both hold exactly rather than to a tolerance, which is what the basis reading its points from QGaussLobatto buys, so the assertions carry none. The mesh is skewed so that a diagonal mass matrix is a property of the basis rather than of a Jacobian that happens to be constant. testPartitionOfUnity fails an unlisted family rather than assume an answer for it, so the family joins those whose shape functions sum to one. Co-Authored-By: Claude --- tests/Makefile.am | 2 + tests/Makefile.in | 216 +++++++++++++++++++++++++++++ tests/fe/fe_gll_collocation_test.C | 188 +++++++++++++++++++++++++ tests/fe/fe_l2_lagrange_gll_test.C | 26 ++++ tests/fe/fe_test.h | 1 + 5 files changed, 433 insertions(+) create mode 100644 tests/fe/fe_gll_collocation_test.C create mode 100644 tests/fe/fe_l2_lagrange_gll_test.C diff --git a/tests/Makefile.am b/tests/Makefile.am index 6f50e5a2287..f85c77f5294 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -35,6 +35,8 @@ unit_tests_sources = \ fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C \ fe/fe_l2_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C \ + fe/fe_gll_collocation_test.C \ fe/fe_lagrange_test.C \ fe/fe_monomial_test.C \ fe/fe_rational_map.C \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 3ad1e6a277e..858910a5afd 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -218,6 +218,7 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ fe/fe_lagrange_test.C fe/fe_monomial_test.C \ fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ @@ -305,6 +306,8 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ fe/unit_tests_dbg-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_lagrange_test.$(OBJEXT) \ + fe/unit_tests_dbg-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_dbg-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_rational_map.$(OBJEXT) \ @@ -436,6 +439,7 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ fe/fe_lagrange_test.C fe/fe_monomial_test.C \ fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ @@ -522,6 +526,8 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ fe/unit_tests_devel-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_lagrange_test.$(OBJEXT) \ + fe/unit_tests_devel-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_devel-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_devel-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_devel-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_devel-fe_rational_map.$(OBJEXT) \ @@ -671,6 +677,7 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ fe/fe_lagrange_test.C fe/fe_monomial_test.C \ fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ @@ -757,6 +764,8 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ fe/unit_tests_oprof-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_lagrange_test.$(OBJEXT) \ + fe/unit_tests_oprof-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_oprof-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_rational_map.$(OBJEXT) \ @@ -884,6 +893,7 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ fe/fe_lagrange_test.C fe/fe_monomial_test.C \ fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ @@ -970,6 +980,8 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ fe/unit_tests_opt-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_lagrange_test.$(OBJEXT) \ + fe/unit_tests_opt-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_opt-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_opt-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_opt-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_opt-fe_rational_map.$(OBJEXT) \ @@ -1097,6 +1109,7 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ fe/fe_lagrange_test.C fe/fe_monomial_test.C \ fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ @@ -1183,6 +1196,8 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ fe/unit_tests_prof-inf_fe_radial_test.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_lagrange_test.$(OBJEXT) \ + fe/unit_tests_prof-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_prof-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_prof-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_prof-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_prof-fe_rational_map.$(OBJEXT) \ @@ -1357,10 +1372,12 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po \ + fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po \ + fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po \ @@ -1374,10 +1391,12 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po \ + fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po \ + fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po \ @@ -1391,10 +1410,12 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po \ + fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po \ + fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po \ @@ -1408,10 +1429,12 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po \ + fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po \ + fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po \ @@ -1425,10 +1448,12 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po \ + fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po \ + fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po \ @@ -2459,6 +2484,7 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ fe/fe_lagrange_test.C fe/fe_monomial_test.C \ fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ @@ -2820,6 +2846,10 @@ fe/unit_tests_dbg-fe_l2_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_dbg-fe_l2_lagrange_gll_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_dbg-fe_gll_collocation_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3144,6 +3174,10 @@ fe/unit_tests_devel-fe_l2_hierarchic_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_devel-fe_l2_lagrange_gll_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_devel-fe_gll_collocation_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3448,6 +3482,10 @@ fe/unit_tests_oprof-fe_l2_hierarchic_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_oprof-fe_l2_lagrange_gll_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_oprof-fe_gll_collocation_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3712,6 +3750,10 @@ fe/unit_tests_opt-fe_l2_hierarchic_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_opt-fe_l2_lagrange_gll_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_opt-fe_gll_collocation_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3976,6 +4018,10 @@ fe/unit_tests_prof-fe_l2_hierarchic_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_prof-fe_l2_lagrange_gll_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_prof-fe_gll_collocation_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -4270,10 +4316,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po@am__quote@ # am--include-marker @@ -4287,10 +4335,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po@am__quote@ # am--include-marker @@ -4304,10 +4354,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po@am__quote@ # am--include-marker @@ -4321,10 +4373,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po@am__quote@ # am--include-marker @@ -4338,10 +4392,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po@am__quote@ # am--include-marker @@ -5131,6 +5187,34 @@ fe/unit_tests_dbg-fe_l2_lagrange_test.obj: fe/fe_l2_lagrange_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_l2_lagrange_test.obj `if test -f 'fe/fe_l2_lagrange_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_test.C'; fi` +fe/unit_tests_dbg-fe_l2_lagrange_gll_test.o: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_l2_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_dbg-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_dbg-fe_l2_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C + +fe/unit_tests_dbg-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_l2_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_dbg-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_dbg-fe_l2_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` + +fe/unit_tests_dbg-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_dbg-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_dbg-fe_gll_collocation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C + +fe/unit_tests_dbg-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_gll_collocation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_dbg-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_dbg-fe_gll_collocation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` + fe/unit_tests_dbg-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Tpo -c -o fe/unit_tests_dbg-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po @@ -6909,6 +6993,34 @@ fe/unit_tests_devel-fe_l2_lagrange_test.obj: fe/fe_l2_lagrange_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_l2_lagrange_test.obj `if test -f 'fe/fe_l2_lagrange_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_test.C'; fi` +fe/unit_tests_devel-fe_l2_lagrange_gll_test.o: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_l2_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_devel-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_devel-fe_l2_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C + +fe/unit_tests_devel-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_l2_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_devel-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_devel-fe_l2_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` + +fe/unit_tests_devel-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_devel-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_devel-fe_gll_collocation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C + +fe/unit_tests_devel-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_gll_collocation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_devel-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_devel-fe_gll_collocation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` + fe/unit_tests_devel-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Tpo -c -o fe/unit_tests_devel-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po @@ -8687,6 +8799,34 @@ fe/unit_tests_oprof-fe_l2_lagrange_test.obj: fe/fe_l2_lagrange_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_l2_lagrange_test.obj `if test -f 'fe/fe_l2_lagrange_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_test.C'; fi` +fe/unit_tests_oprof-fe_l2_lagrange_gll_test.o: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_l2_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_oprof-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_oprof-fe_l2_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C + +fe/unit_tests_oprof-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_l2_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_oprof-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_oprof-fe_l2_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` + +fe/unit_tests_oprof-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_oprof-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_oprof-fe_gll_collocation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C + +fe/unit_tests_oprof-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_gll_collocation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_oprof-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_oprof-fe_gll_collocation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` + fe/unit_tests_oprof-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Tpo -c -o fe/unit_tests_oprof-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po @@ -10465,6 +10605,34 @@ fe/unit_tests_opt-fe_l2_lagrange_test.obj: fe/fe_l2_lagrange_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_l2_lagrange_test.obj `if test -f 'fe/fe_l2_lagrange_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_test.C'; fi` +fe/unit_tests_opt-fe_l2_lagrange_gll_test.o: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_l2_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_opt-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_opt-fe_l2_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C + +fe/unit_tests_opt-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_l2_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_opt-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_opt-fe_l2_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` + +fe/unit_tests_opt-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_opt-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_opt-fe_gll_collocation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C + +fe/unit_tests_opt-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_gll_collocation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_opt-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_opt-fe_gll_collocation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` + fe/unit_tests_opt-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Tpo -c -o fe/unit_tests_opt-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po @@ -12243,6 +12411,34 @@ fe/unit_tests_prof-fe_l2_lagrange_test.obj: fe/fe_l2_lagrange_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_l2_lagrange_test.obj `if test -f 'fe/fe_l2_lagrange_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_test.C'; fi` +fe/unit_tests_prof-fe_l2_lagrange_gll_test.o: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_l2_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_prof-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_prof-fe_l2_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_l2_lagrange_gll_test.o `test -f 'fe/fe_l2_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_l2_lagrange_gll_test.C + +fe/unit_tests_prof-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_l2_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Tpo -c -o fe/unit_tests_prof-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_l2_lagrange_gll_test.C' object='fe/unit_tests_prof-fe_l2_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` + +fe/unit_tests_prof-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_prof-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_prof-fe_gll_collocation_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C + +fe/unit_tests_prof-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_gll_collocation_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_prof-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_collocation_test.C' object='fe/unit_tests_prof-fe_gll_collocation_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` + fe/unit_tests_prof-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Tpo -c -o fe/unit_tests_prof-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po @@ -14189,10 +14385,12 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po @@ -14206,10 +14404,12 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po @@ -14223,10 +14423,12 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po @@ -14240,10 +14442,12 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po @@ -14257,10 +14461,12 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po @@ -14871,10 +15077,12 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po @@ -14888,10 +15096,12 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po @@ -14905,10 +15115,12 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po @@ -14922,10 +15134,12 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po @@ -14939,10 +15153,12 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po diff --git a/tests/fe/fe_gll_collocation_test.C b/tests/fe/fe_gll_collocation_test.C new file mode 100644 index 00000000000..6e196cb900e --- /dev/null +++ b/tests/fe/fe_gll_collocation_test.C @@ -0,0 +1,188 @@ +// A nodal basis whose interpolation points are the points of a quadrature rule is +// collocated with it: each shape function is one at its own point and zero at every other, +// so the matrix of shape function values is the identity and the mass matrix the rule +// assembles is diagonal. The second holds for any mapping and any element shape, since the +// Jacobian only scales a diagonal entry. +// +// The property is exact rather than approximate, so these tests compare against 1 and 0 +// with no tolerance. That is what the basis reading its points from QGaussLobatto buys: a +// basis that computed its own would agree only to roundoff. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +#include +#include +#include + +using namespace libMesh; + +template +class FEGLLCollocationTest : public CppUnit::TestCase +{ +protected: + std::unique_ptr _mesh; + std::string libmesh_suite_name; + +public: + void setUp() + { + _mesh = std::make_unique(*TestCommWorld); + + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + + if (dim == 1) + MeshTools::Generation::build_line(*_mesh, 2, 0., 1., elem_type); + else if (dim == 2) + MeshTools::Generation::build_square(*_mesh, 2, 2, 0., 1., 0., 1., elem_type); + else + MeshTools::Generation::build_cube(*_mesh, 2, 2, 2, 0., 1., 0., 1., 0., 1., elem_type); + + // Skew the mesh so that no element is a scaled copy of the reference element, which + // holds the diagonal mass matrix to being a property of the basis rather than of a + // Jacobian that happens to be constant. + for (auto * node : _mesh->node_ptr_range()) + { + Node & p = *node; + const Real y = (LIBMESH_DIM > 1) ? p(1) : 0.; + const Real z = (LIBMESH_DIM > 2) ? p(2) : 0.; + + p(0) += 0.3 * y + 0.17 * z; + if (LIBMESH_DIM > 1) + p(1) += 0.23 * z; + } + } + + void tearDown() { _mesh.reset(); } + + /// The rule the family pairs itself with, which is the one it is collocated with + std::unique_ptr collocated_rule(const FEType & fe_type, const unsigned int dim) + { + return fe_type.default_quadrature_rule(dim); + } + + void testShapesAreIdentity() + { + LOG_UNIT_TEST; + + const FEType fe_type(order, L2_LAGRANGE_GLL); + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + + std::unique_ptr fe = FEBase::build(dim, fe_type); + std::unique_ptr qrule = collocated_rule(fe_type, dim); + fe->attach_quadrature_rule(qrule.get()); + + // The accessors have to be reached before reinit, which is what tells the element what + // to compute + const std::vector> & phi = fe->get_phi(); + + unsigned int n_elem = 0; + + for (const auto * elem : _mesh->active_local_element_ptr_range()) + { + fe->reinit(elem); + + // The default rule carries one point per degree of freedom + CPPUNIT_ASSERT_EQUAL(phi.size(), std::size_t(qrule->n_points())); + + for (const auto i : index_range(phi)) + for (const auto q : index_range(phi[i])) + CPPUNIT_ASSERT_EQUAL((i == q) ? Real(1) : Real(0), phi[i][q]); + + ++n_elem; + } + + _mesh->comm().sum(n_elem); + CPPUNIT_ASSERT(n_elem > 0); + } + + void testMassMatrixIsDiagonal() + { + LOG_UNIT_TEST; + + const FEType fe_type(order, L2_LAGRANGE_GLL); + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + + std::unique_ptr fe = FEBase::build(dim, fe_type); + std::unique_ptr qrule = collocated_rule(fe_type, dim); + fe->attach_quadrature_rule(qrule.get()); + + const std::vector> & phi = fe->get_phi(); + const std::vector & JxW = fe->get_JxW(); + + for (const auto * elem : _mesh->active_local_element_ptr_range()) + { + fe->reinit(elem); + + const std::size_t n_dofs = phi.size(); + + for (const auto i : make_range(n_dofs)) + for (const auto j : make_range(n_dofs)) + { + Real m = 0.; + for (const auto q : index_range(JxW)) + m += JxW[q] * phi[i][q] * phi[j][q]; + + if (i == j) + { + // A diagonal entry is the weight of its own point times the Jacobian + // there, which is positive on a valid element, so the mass matrix is + // positive definite and its inverse costs a reciprocal per entry + CPPUNIT_ASSERT(m > 0.); + LIBMESH_ASSERT_FP_EQUAL(JxW[i], m, TOLERANCE*TOLERANCE); + } + else + CPPUNIT_ASSERT_EQUAL(Real(0), m); + } + } + } +}; + +#define INSTANTIATE_FEGLLCOLLOCATIONTEST(elemtype, order) \ + class FEGLLCollocationTest_##order##_##elemtype : \ + public FEGLLCollocationTest { \ + public: \ + FEGLLCollocationTest_##order##_##elemtype() : \ + FEGLLCollocationTest() { \ + if (unitlog->summarized_logs_enabled()) \ + this->libmesh_suite_name = "FEGLLCollocationTest"; \ + else \ + this->libmesh_suite_name = \ + "FEGLLCollocationTest_" #order "_" #elemtype; \ + } \ + CPPUNIT_TEST_SUITE( FEGLLCollocationTest_##order##_##elemtype ); \ + CPPUNIT_TEST( testShapesAreIdentity ); \ + CPPUNIT_TEST( testMassMatrixIsDiagonal ); \ + CPPUNIT_TEST_SUITE_END(); \ + }; \ + \ + CPPUNIT_TEST_SUITE_REGISTRATION( FEGLLCollocationTest_##order##_##elemtype ) + +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE2, FIRST); +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, THIRD); +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, EIGHTH); + +#if LIBMESH_DIM > 1 +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD4, FIRST); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, SECOND); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, FOURTH); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, EIGHTH); +#endif + +#if LIBMESH_DIM > 2 +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX8, FIRST); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, SECOND); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, FOURTH); +#endif diff --git a/tests/fe/fe_l2_lagrange_gll_test.C b/tests/fe/fe_l2_lagrange_gll_test.C new file mode 100644 index 00000000000..3e9eaec453a --- /dev/null +++ b/tests/fe/fe_l2_lagrange_gll_test.C @@ -0,0 +1,26 @@ +#include "fe_test.h" + +// The L2_LAGRANGE_GLL basis is a tensor product, so it lives on the tensor product element +// types alone. Every one of its degrees of freedom belongs to the element, so it asks +// nothing of the element's node count and an order above two runs on a first order type. + +INSTANTIATE_FETEST(FIRST, L2_LAGRANGE_GLL, EDGE2); +INSTANTIATE_FETEST(SECOND, L2_LAGRANGE_GLL, EDGE2); +INSTANTIATE_FETEST(SECOND, L2_LAGRANGE_GLL, EDGE3); +INSTANTIATE_FETEST(THIRD, L2_LAGRANGE_GLL, EDGE3); +INSTANTIATE_FETEST(FOURTH, L2_LAGRANGE_GLL, EDGE3); + +#if LIBMESH_DIM > 1 +INSTANTIATE_FETEST(FIRST, L2_LAGRANGE_GLL, QUAD4); +INSTANTIATE_FETEST(SECOND, L2_LAGRANGE_GLL, QUAD4); +INSTANTIATE_FETEST(SECOND, L2_LAGRANGE_GLL, QUAD9); +INSTANTIATE_FETEST(THIRD, L2_LAGRANGE_GLL, QUAD9); +INSTANTIATE_FETEST(FOURTH, L2_LAGRANGE_GLL, QUAD9); +#endif + +#if LIBMESH_DIM > 2 +INSTANTIATE_FETEST(FIRST, L2_LAGRANGE_GLL, HEX8); +INSTANTIATE_FETEST(SECOND, L2_LAGRANGE_GLL, HEX8); +INSTANTIATE_FETEST(SECOND, L2_LAGRANGE_GLL, HEX27); +INSTANTIATE_FETEST(THIRD, L2_LAGRANGE_GLL, HEX27); +#endif diff --git a/tests/fe/fe_test.h b/tests/fe/fe_test.h index d2a6e498366..b98040086e6 100644 --- a/tests/fe/fe_test.h +++ b/tests/fe/fe_test.h @@ -757,6 +757,7 @@ class FETest : public FETestBase { case LAGRANGE: case L2_LAGRANGE: + case L2_LAGRANGE_GLL: case BERNSTEIN: case RATIONAL_BERNSTEIN: { From e5e280f609c82ddab9a5e6124a2769ecb3822865 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 08:59:10 -0700 Subject: [PATCH 21/27] Share the tensor product among the Gauss-Lobatto nodal families The tensor product evaluation and the table of second derivative coordinate pairs stood in each of the three dimension files, so a fix to either wanted three applications and the C0 family would have added three more copies. They stand once now, in a header the dimension files reach through, leaving those files holding only the specializations that FE requires per dimension and family, as fe_lagrange_shape_2D.C already does for LAGRANGE and L2_LAGRANGE. What separates the families is which tensor index a shape function index names, and that alone, so it is a function of its own that each family specializes. A family without a specialization does not link. The pair table is now one table rather than one per dimension: libMesh numbers the second derivatives so that a given dimension uses the leading d(d+1)/2 of them, an edge reading the first entry, a face the first three and a cell all six. Co-Authored-By: Claude --- include/fe/fe_lagrange_gll_shape.h | 154 +++++++++++++++++++++++++++++ include/libmesh/Makefile.am | 4 + include/libmesh/Makefile.in | 9 +- src/fe/fe_lagrange_gll_shape_1D.C | 95 +++++------------- src/fe/fe_lagrange_gll_shape_2D.C | 95 +++++------------- src/fe/fe_lagrange_gll_shape_3D.C | 95 +++++------------- 6 files changed, 233 insertions(+), 219 deletions(-) create mode 100644 include/fe/fe_lagrange_gll_shape.h diff --git a/include/fe/fe_lagrange_gll_shape.h b/include/fe/fe_lagrange_gll_shape.h new file mode 100644 index 00000000000..3b925f1ad26 --- /dev/null +++ b/include/fe/fe_lagrange_gll_shape.h @@ -0,0 +1,154 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +#ifndef LIBMESH_FE_LAGRANGE_GLL_SHAPE_H +#define LIBMESH_FE_LAGRANGE_GLL_SHAPE_H + +// Local includes +#include "libmesh/enum_fe_family.h" +#include "libmesh/enum_order.h" +#include "libmesh/fe_lagrange_gll_shape_1D.h" + +// The tensor product that the Gauss-Lobatto nodal families on the tensor product element +// types build their shape functions from. The families differ in which tensor index a shape +// function index names, and in nothing else, so the evaluation lives here once. + +namespace libMesh +{ + +/** + * The pairs of coordinates that the second derivative index runs over, in the order libMesh + * numbers them. + * + * The order is such that a given dimension uses the leading \f$d(d+1)/2\f$ of them, so one + * table serves all three: an edge reads the first entry, a face the first three, and a cell + * all six. + */ +constexpr unsigned int fe_lagrange_gll_second_deriv_pairs[6][2] = + {{0, 0}, // d^2 phi / dxi^2 + {0, 1}, // d^2 phi / dxi deta + {1, 1}, // d^2 phi / deta^2 + {0, 2}, // d^2 phi / dxi dzeta + {1, 2}, // d^2 phi / deta dzeta + {2, 2}}; // d^2 phi / dzeta^2 + + +/** + * \returns The number of second derivatives that a shape function of dimension \p Dim has. + */ +template +constexpr unsigned int fe_lagrange_gll_n_second_derivs() +{ + return Dim * (Dim + 1) / 2; +} + +/** + * Fills the leading \p dim entries of \p indices with the tensor index that shape function + * \p i of order \p order names, the entry for a coordinate giving the one-dimensional shape + * function that coordinate contributes. + * + * This is the whole of what separates the Gauss-Lobatto nodal families, so it is declared + * here and specialized once per family. A family that has no specialization does not link, + * which is what should happen. + */ +template +void fe_lagrange_gll_tensor_index(const Elem * elem, + const Order order, + const unsigned int dim, + const unsigned int i, + unsigned int * indices); + + +/** + * The L2_LAGRANGE_GLL degrees of freedom all belong to the element, so their indices run over + * the tensor grid in lexicographic order with the first coordinate varying fastest, which is + * also the order in which QBase lays out a tensor product rule. The element carries no index + * of its own here, so it goes unread. + */ +template <> +inline void fe_lagrange_gll_tensor_index(const Elem *, + const Order order, + const unsigned int dim, + const unsigned int i, + unsigned int * indices) +{ + const unsigned int n = static_cast(order) + 1; + + unsigned int stride = 1; + + for (unsigned int d = 0; d != dim; ++d) + { + indices[d] = (i / stride) % n; + stride *= n; + } + + libmesh_assert_less (i, stride); +} + +/** + * \returns The \p Dim dimensional tensor product of one-dimensional Gauss-Lobatto nodal shape + * functions that shape function \p i of family \p T names, differentiated once in each + * coordinate that the leading \p n_derivs entries of \p derivs name. + * + * A value passes no coordinates, a first derivative one, and a second derivative two, so the + * three shape routines of every family and dimension reach the basis through this one + * function. + */ +template +inline Real fe_lagrange_gll_shape(const Elem * elem, + const Order order, + const unsigned int i, + const Point & p, + const unsigned int * const derivs, + const unsigned int n_derivs) +{ + unsigned int indices[3]; + + fe_lagrange_gll_tensor_index(elem, order, Dim, i, indices); + + Real value = 1.; + + for (unsigned int d = 0; d != Dim; ++d) + { + unsigned int n_d = 0; + for (unsigned int k = 0; k != n_derivs; ++k) + if (derivs[k] == d) + ++n_d; + + switch (n_d) + { + case 0: + value *= fe_lagrange_gll_1D_shape(order, indices[d], p(d)); + break; + + case 1: + value *= fe_lagrange_gll_1D_shape_deriv(order, indices[d], 0, p(d)); + break; + + default: + value *= fe_lagrange_gll_1D_shape_second_deriv(order, indices[d], 0, p(d)); + break; + } + } + + return value; +} + +} // namespace libMesh + +#endif // LIBMESH_FE_LAGRANGE_GLL_SHAPE_H diff --git a/include/libmesh/Makefile.am b/include/libmesh/Makefile.am index 3d9e3000f96..0fd68b0ff7b 100644 --- a/include/libmesh/Makefile.am +++ b/include/libmesh/Makefile.am @@ -78,6 +78,7 @@ BUILT_SOURCES = \ fe_compute_data.h \ fe_interface.h \ fe_interface_macros.h \ + fe_lagrange_gll_shape.h \ fe_lagrange_gll_shape_1D.h \ fe_lagrange_shape_1D.h \ fe_macro.h \ @@ -844,6 +845,9 @@ fe_interface.h: $(top_srcdir)/include/fe/fe_interface.h fe_interface_macros.h: $(top_srcdir)/include/fe/fe_interface_macros.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +fe_lagrange_gll_shape.h: $(top_srcdir)/include/fe/fe_lagrange_gll_shape.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + fe_lagrange_gll_shape_1D.h: $(top_srcdir)/include/fe/fe_lagrange_gll_shape_1D.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/include/libmesh/Makefile.in b/include/libmesh/Makefile.in index 1905073fef8..a068e69bb06 100644 --- a/include/libmesh/Makefile.in +++ b/include/libmesh/Makefile.in @@ -573,9 +573,9 @@ BUILT_SOURCES = dirichlet_boundaries.h dof_map.h dof_map_base.h \ uniform_refinement_estimator.h \ weighted_patch_recovery_error_estimator.h fe.h fe_abstract.h \ fe_base.h fe_compute_data.h fe_interface.h \ - fe_interface_macros.h fe_lagrange_gll_shape_1D.h \ - fe_lagrange_shape_1D.h fe_macro.h fe_map.h \ - fe_transformation_base.h fe_type.h fe_xyz_map.h \ + fe_interface_macros.h fe_lagrange_gll_shape.h \ + fe_lagrange_gll_shape_1D.h fe_lagrange_shape_1D.h fe_macro.h \ + fe_map.h fe_transformation_base.h fe_type.h fe_xyz_map.h \ h1_fe_transformation.h hcurl_fe_transformation.h \ hdiv_fe_transformation.h inf_fe.h inf_fe_instantiate_1D.h \ inf_fe_instantiate_2D.h inf_fe_instantiate_3D.h inf_fe_macro.h \ @@ -1192,6 +1192,9 @@ fe_interface.h: $(top_srcdir)/include/fe/fe_interface.h fe_interface_macros.h: $(top_srcdir)/include/fe/fe_interface_macros.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ +fe_lagrange_gll_shape.h: $(top_srcdir)/include/fe/fe_lagrange_gll_shape.h + $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ + fe_lagrange_gll_shape_1D.h: $(top_srcdir)/include/fe/fe_lagrange_gll_shape_1D.h $(AM_V_GEN)rm -f $@ && $(LN_S) -f $< $@ diff --git a/src/fe/fe_lagrange_gll_shape_1D.C b/src/fe/fe_lagrange_gll_shape_1D.C index 6cb5ae76647..8f2b4baa3cf 100644 --- a/src/fe/fe_lagrange_gll_shape_1D.C +++ b/src/fe/fe_lagrange_gll_shape_1D.C @@ -16,74 +16,16 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + // Local includes #include "libmesh/fe.h" #include "libmesh/elem.h" -#include "libmesh/fe_lagrange_gll_shape_1D.h" +#include "libmesh/fe_lagrange_gll_shape.h" namespace libMesh { -namespace { - -/** - * \returns The 1 dimensional tensor product of one-dimensional Gauss-Lobatto nodal - * shape functions, differentiated once in each coordinate that \p derivs names. - * - * The degrees of freedom of the L2_LAGRANGE_GLL basis all belong to the element, so the - * \p i'th runs over the points of the tensor grid in lexicographic order, the first - * coordinate varying fastest. - */ -Real tensor_shape(const Order order, - const unsigned int i, - const Point & p, - const unsigned int * const derivs, - const unsigned int n_derivs) -{ - const unsigned int n = static_cast(order) + 1; - - libmesh_assert_less (i, n); - - Real value = 1.; - unsigned int stride = 1; - - for (unsigned int d = 0; d != 1; ++d) - { - const unsigned int i_d = (i / stride) % n; - stride *= n; - - unsigned int n_d = 0; - for (unsigned int k = 0; k != n_derivs; ++k) - if (derivs[k] == d) - ++n_d; - - switch (n_d) - { - case 0: - value *= fe_lagrange_gll_1D_shape(order, i_d, p(d)); - break; - - case 1: - value *= fe_lagrange_gll_1D_shape_deriv(order, i_d, 0, p(d)); - break; - - default: - value *= fe_lagrange_gll_1D_shape_second_deriv(order, i_d, 0, p(d)); - break; - } - } - - return value; -} - -#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES -/// The coordinate pairs that the second derivative index runs over -const unsigned int second_deriv_pairs[1][2] = {{0, 0}}; -#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES - -} // anonymous namespace - LIBMESH_DEFAULT_VECTORIZED_FE(1,L2_LAGRANGE_GLL) @@ -94,7 +36,8 @@ Real FE<1,L2_LAGRANGE_GLL>::shape(const ElemType, const unsigned int i, const Point & p) { - return tensor_shape(order, i, p, nullptr, 0); + return fe_lagrange_gll_shape + (nullptr, order, i, p, nullptr, 0); } @@ -107,7 +50,8 @@ Real FE<1,L2_LAGRANGE_GLL>::shape(const Elem * elem, { libmesh_assert(elem); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, nullptr, 0); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, nullptr, 0); } @@ -120,7 +64,8 @@ Real FE<1,L2_LAGRANGE_GLL>::shape(const FEType fet, { libmesh_assert(elem); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); } @@ -133,7 +78,8 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, { libmesh_assert_less (j, 1); - return tensor_shape(order, i, p, &j, 1); + return fe_lagrange_gll_shape + (nullptr, order, i, p, &j, 1); } @@ -148,7 +94,8 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_deriv(const Elem * elem, libmesh_assert(elem); libmesh_assert_less (j, 1); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, &j, 1); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, &j, 1); } @@ -163,7 +110,8 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, libmesh_assert(elem); libmesh_assert_less (j, 1); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, &j, 1); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, &j, 1); } @@ -176,9 +124,10 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_second_deriv(const ElemType, const unsigned int j, const Point & p) { - libmesh_assert_less (j, 1); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<1>()); - return tensor_shape(order, i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (nullptr, order, i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } @@ -191,9 +140,10 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, const bool add_p_level) { libmesh_assert(elem); - libmesh_assert_less (j, 1); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<1>()); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } @@ -206,9 +156,10 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, const bool add_p_level) { libmesh_assert(elem); - libmesh_assert_less (j, 1); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<1>()); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } diff --git a/src/fe/fe_lagrange_gll_shape_2D.C b/src/fe/fe_lagrange_gll_shape_2D.C index 5d346d72b2d..b1803b36985 100644 --- a/src/fe/fe_lagrange_gll_shape_2D.C +++ b/src/fe/fe_lagrange_gll_shape_2D.C @@ -16,74 +16,16 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + // Local includes #include "libmesh/fe.h" #include "libmesh/elem.h" -#include "libmesh/fe_lagrange_gll_shape_1D.h" +#include "libmesh/fe_lagrange_gll_shape.h" namespace libMesh { -namespace { - -/** - * \returns The 2 dimensional tensor product of one-dimensional Gauss-Lobatto nodal - * shape functions, differentiated once in each coordinate that \p derivs names. - * - * The degrees of freedom of the L2_LAGRANGE_GLL basis all belong to the element, so the - * \p i'th runs over the points of the tensor grid in lexicographic order, the first - * coordinate varying fastest. - */ -Real tensor_shape(const Order order, - const unsigned int i, - const Point & p, - const unsigned int * const derivs, - const unsigned int n_derivs) -{ - const unsigned int n = static_cast(order) + 1; - - libmesh_assert_less (i, n*n); - - Real value = 1.; - unsigned int stride = 1; - - for (unsigned int d = 0; d != 2; ++d) - { - const unsigned int i_d = (i / stride) % n; - stride *= n; - - unsigned int n_d = 0; - for (unsigned int k = 0; k != n_derivs; ++k) - if (derivs[k] == d) - ++n_d; - - switch (n_d) - { - case 0: - value *= fe_lagrange_gll_1D_shape(order, i_d, p(d)); - break; - - case 1: - value *= fe_lagrange_gll_1D_shape_deriv(order, i_d, 0, p(d)); - break; - - default: - value *= fe_lagrange_gll_1D_shape_second_deriv(order, i_d, 0, p(d)); - break; - } - } - - return value; -} - -#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES -/// The coordinate pairs that the second derivative index runs over -const unsigned int second_deriv_pairs[3][2] = {{0, 0}, {0, 1}, {1, 1}}; -#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES - -} // anonymous namespace - LIBMESH_DEFAULT_VECTORIZED_FE(2,L2_LAGRANGE_GLL) @@ -94,7 +36,8 @@ Real FE<2,L2_LAGRANGE_GLL>::shape(const ElemType, const unsigned int i, const Point & p) { - return tensor_shape(order, i, p, nullptr, 0); + return fe_lagrange_gll_shape + (nullptr, order, i, p, nullptr, 0); } @@ -107,7 +50,8 @@ Real FE<2,L2_LAGRANGE_GLL>::shape(const Elem * elem, { libmesh_assert(elem); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, nullptr, 0); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, nullptr, 0); } @@ -120,7 +64,8 @@ Real FE<2,L2_LAGRANGE_GLL>::shape(const FEType fet, { libmesh_assert(elem); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); } @@ -133,7 +78,8 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, { libmesh_assert_less (j, 2); - return tensor_shape(order, i, p, &j, 1); + return fe_lagrange_gll_shape + (nullptr, order, i, p, &j, 1); } @@ -148,7 +94,8 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_deriv(const Elem * elem, libmesh_assert(elem); libmesh_assert_less (j, 2); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, &j, 1); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, &j, 1); } @@ -163,7 +110,8 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, libmesh_assert(elem); libmesh_assert_less (j, 2); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, &j, 1); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, &j, 1); } @@ -176,9 +124,10 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_second_deriv(const ElemType, const unsigned int j, const Point & p) { - libmesh_assert_less (j, 3); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<2>()); - return tensor_shape(order, i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (nullptr, order, i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } @@ -191,9 +140,10 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, const bool add_p_level) { libmesh_assert(elem); - libmesh_assert_less (j, 3); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<2>()); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } @@ -206,9 +156,10 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, const bool add_p_level) { libmesh_assert(elem); - libmesh_assert_less (j, 3); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<2>()); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } diff --git a/src/fe/fe_lagrange_gll_shape_3D.C b/src/fe/fe_lagrange_gll_shape_3D.C index 652eb8fe40c..31c95105c01 100644 --- a/src/fe/fe_lagrange_gll_shape_3D.C +++ b/src/fe/fe_lagrange_gll_shape_3D.C @@ -16,74 +16,16 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + // Local includes #include "libmesh/fe.h" #include "libmesh/elem.h" -#include "libmesh/fe_lagrange_gll_shape_1D.h" +#include "libmesh/fe_lagrange_gll_shape.h" namespace libMesh { -namespace { - -/** - * \returns The 3 dimensional tensor product of one-dimensional Gauss-Lobatto nodal - * shape functions, differentiated once in each coordinate that \p derivs names. - * - * The degrees of freedom of the L2_LAGRANGE_GLL basis all belong to the element, so the - * \p i'th runs over the points of the tensor grid in lexicographic order, the first - * coordinate varying fastest. - */ -Real tensor_shape(const Order order, - const unsigned int i, - const Point & p, - const unsigned int * const derivs, - const unsigned int n_derivs) -{ - const unsigned int n = static_cast(order) + 1; - - libmesh_assert_less (i, n*n*n); - - Real value = 1.; - unsigned int stride = 1; - - for (unsigned int d = 0; d != 3; ++d) - { - const unsigned int i_d = (i / stride) % n; - stride *= n; - - unsigned int n_d = 0; - for (unsigned int k = 0; k != n_derivs; ++k) - if (derivs[k] == d) - ++n_d; - - switch (n_d) - { - case 0: - value *= fe_lagrange_gll_1D_shape(order, i_d, p(d)); - break; - - case 1: - value *= fe_lagrange_gll_1D_shape_deriv(order, i_d, 0, p(d)); - break; - - default: - value *= fe_lagrange_gll_1D_shape_second_deriv(order, i_d, 0, p(d)); - break; - } - } - - return value; -} - -#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES -/// The coordinate pairs that the second derivative index runs over -const unsigned int second_deriv_pairs[6][2] = {{0, 0}, {0, 1}, {1, 1}, {0, 2}, {1, 2}, {2, 2}}; -#endif // LIBMESH_ENABLE_SECOND_DERIVATIVES - -} // anonymous namespace - LIBMESH_DEFAULT_VECTORIZED_FE(3,L2_LAGRANGE_GLL) @@ -94,7 +36,8 @@ Real FE<3,L2_LAGRANGE_GLL>::shape(const ElemType, const unsigned int i, const Point & p) { - return tensor_shape(order, i, p, nullptr, 0); + return fe_lagrange_gll_shape + (nullptr, order, i, p, nullptr, 0); } @@ -107,7 +50,8 @@ Real FE<3,L2_LAGRANGE_GLL>::shape(const Elem * elem, { libmesh_assert(elem); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, nullptr, 0); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, nullptr, 0); } @@ -120,7 +64,8 @@ Real FE<3,L2_LAGRANGE_GLL>::shape(const FEType fet, { libmesh_assert(elem); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); } @@ -133,7 +78,8 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, { libmesh_assert_less (j, 3); - return tensor_shape(order, i, p, &j, 1); + return fe_lagrange_gll_shape + (nullptr, order, i, p, &j, 1); } @@ -148,7 +94,8 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_deriv(const Elem * elem, libmesh_assert(elem); libmesh_assert_less (j, 3); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, &j, 1); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, &j, 1); } @@ -163,7 +110,8 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, libmesh_assert(elem); libmesh_assert_less (j, 3); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, &j, 1); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, &j, 1); } @@ -176,9 +124,10 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_second_deriv(const ElemType, const unsigned int j, const Point & p) { - libmesh_assert_less (j, 6); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<3>()); - return tensor_shape(order, i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (nullptr, order, i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } @@ -191,9 +140,10 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, const bool add_p_level) { libmesh_assert(elem); - libmesh_assert_less (j, 6); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<3>()); - return tensor_shape(order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } @@ -206,9 +156,10 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, const bool add_p_level) { libmesh_assert(elem); - libmesh_assert_less (j, 6); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<3>()); - return tensor_shape(fet.order + add_p_level*elem->p_level(), i, p, second_deriv_pairs[j], 2); + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); } From 07d510625269315223ac909835b1069da3125c83 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 08:59:17 -0700 Subject: [PATCH 22/27] Hold the Gauss-Lobatto basis to LAGRANGE where the two coincide At orders one and two on the tensor product element types the Gauss-Lobatto nodal families and LAGRANGE are the same functions, because the Gauss-Lobatto points of those orders, {-1,1} and {-1,0,1}, are where those elements put their nodes. They reach those functions by different routes: LAGRANGE evaluates a closed form per order, and the Gauss-Lobatto basis evaluates a barycentric form against its point table. Nothing held the two together, so either could have drifted without a test noticing. This pairs each Gauss-Lobatto shape function with the LAGRANGE one whose node sits at the same reference point and holds them to the same values away from those points. It is what would catch the point table, the barycentric evaluation, or the tensor index map moving away from values that are already settled. The serendipity types are left out. LAGRANGE spans a smaller space on QUAD8 and HEX20, eight and twenty functions against the nine and twenty seven of a tensor product of the same order, so there is no pairing to hold there. Co-Authored-By: Claude --- tests/Makefile.am | 1 + tests/Makefile.in | 147 ++++++++++++++++--- tests/fe/fe_gll_lagrange_agreement_test.C | 168 ++++++++++++++++++++++ 3 files changed, 298 insertions(+), 18 deletions(-) create mode 100644 tests/fe/fe_gll_lagrange_agreement_test.C diff --git a/tests/Makefile.am b/tests/Makefile.am index f85c77f5294..e7398511fe2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -37,6 +37,7 @@ unit_tests_sources = \ fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C \ fe/fe_gll_collocation_test.C \ + fe/fe_gll_lagrange_agreement_test.C \ fe/fe_lagrange_test.C \ fe/fe_monomial_test.C \ fe/fe_rational_map.C \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 858910a5afd..d396cd9ae96 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -219,9 +219,10 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_lagrange_test.C fe/fe_monomial_test.C \ - fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ - fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_monomial_test.C fe/fe_rational_map.C \ + fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ + fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -308,6 +309,7 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_gll_collocation_test.$(OBJEXT) \ + fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_rational_map.$(OBJEXT) \ @@ -440,9 +442,10 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_lagrange_test.C fe/fe_monomial_test.C \ - fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ - fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_monomial_test.C fe/fe_rational_map.C \ + fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ + fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -528,6 +531,7 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_devel-fe_gll_collocation_test.$(OBJEXT) \ + fe/unit_tests_devel-fe_gll_lagrange_agreement_test.$(OBJEXT) \ fe/unit_tests_devel-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_devel-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_devel-fe_rational_map.$(OBJEXT) \ @@ -678,9 +682,10 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_lagrange_test.C fe/fe_monomial_test.C \ - fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ - fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_monomial_test.C fe/fe_rational_map.C \ + fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ + fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -766,6 +771,7 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_gll_collocation_test.$(OBJEXT) \ + fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_rational_map.$(OBJEXT) \ @@ -894,9 +900,10 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_lagrange_test.C fe/fe_monomial_test.C \ - fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ - fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_monomial_test.C fe/fe_rational_map.C \ + fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ + fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -982,6 +989,7 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_opt-fe_gll_collocation_test.$(OBJEXT) \ + fe/unit_tests_opt-fe_gll_lagrange_agreement_test.$(OBJEXT) \ fe/unit_tests_opt-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_opt-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_opt-fe_rational_map.$(OBJEXT) \ @@ -1110,9 +1118,10 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_lagrange_test.C fe/fe_monomial_test.C \ - fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ - fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_monomial_test.C fe/fe_rational_map.C \ + fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ + fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -1198,6 +1207,7 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_prof-fe_gll_collocation_test.$(OBJEXT) \ + fe/unit_tests_prof-fe_gll_lagrange_agreement_test.$(OBJEXT) \ fe/unit_tests_prof-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_prof-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_prof-fe_rational_map.$(OBJEXT) \ @@ -1373,6 +1383,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po \ + fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po \ @@ -1392,6 +1403,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po \ + fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po \ @@ -1411,6 +1423,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po \ + fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po \ @@ -1430,6 +1443,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po \ + fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po \ @@ -1449,6 +1463,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po \ + fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po \ @@ -2485,9 +2500,10 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_lagrange_test.C fe/fe_monomial_test.C \ - fe/fe_rational_map.C fe/fe_rational_test.C fe/fe_side_test.C \ - fe/fe_szabab_test.C fe/fe_test.h fe/fe_xyz_test.C \ + fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_monomial_test.C fe/fe_rational_map.C \ + fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ + fe/fe_test.h fe/fe_xyz_test.C \ fe/dual_shape_verification_test.C geom/bbox_test.C \ geom/edge_test.C geom/elem_test.C geom/elem_test.h \ geom/node_test.C geom/point_test.C geom/point_test.h \ @@ -2850,6 +2866,8 @@ fe/unit_tests_dbg-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3178,6 +3196,8 @@ fe/unit_tests_devel-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_devel-fe_gll_lagrange_agreement_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3486,6 +3506,8 @@ fe/unit_tests_oprof-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3754,6 +3776,8 @@ fe/unit_tests_opt-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_opt-fe_gll_lagrange_agreement_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -4022,6 +4046,8 @@ fe/unit_tests_prof-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_prof-fe_gll_lagrange_agreement_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -4317,6 +4343,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po@am__quote@ # am--include-marker @@ -4336,6 +4363,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po@am__quote@ # am--include-marker @@ -4355,6 +4383,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po@am__quote@ # am--include-marker @@ -4374,6 +4403,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po@am__quote@ # am--include-marker @@ -4393,6 +4423,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po@am__quote@ # am--include-marker @@ -5215,6 +5246,20 @@ fe/unit_tests_dbg-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.o: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C + +fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` + fe/unit_tests_dbg-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Tpo -c -o fe/unit_tests_dbg-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po @@ -7021,6 +7066,20 @@ fe/unit_tests_devel-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +fe/unit_tests_devel-fe_gll_lagrange_agreement_test.o: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_gll_lagrange_agreement_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_devel-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_devel-fe_gll_lagrange_agreement_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C + +fe/unit_tests_devel-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_gll_lagrange_agreement_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_devel-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_devel-fe_gll_lagrange_agreement_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` + fe/unit_tests_devel-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Tpo -c -o fe/unit_tests_devel-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po @@ -8827,6 +8886,20 @@ fe/unit_tests_oprof-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.o: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C + +fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` + fe/unit_tests_oprof-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Tpo -c -o fe/unit_tests_oprof-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po @@ -10633,6 +10706,20 @@ fe/unit_tests_opt-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +fe/unit_tests_opt-fe_gll_lagrange_agreement_test.o: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_gll_lagrange_agreement_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_opt-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_opt-fe_gll_lagrange_agreement_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C + +fe/unit_tests_opt-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_gll_lagrange_agreement_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_opt-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_opt-fe_gll_lagrange_agreement_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` + fe/unit_tests_opt-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Tpo -c -o fe/unit_tests_opt-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po @@ -12439,6 +12526,20 @@ fe/unit_tests_prof-fe_gll_collocation_test.obj: fe/fe_gll_collocation_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_gll_collocation_test.obj `if test -f 'fe/fe_gll_collocation_test.C'; then $(CYGPATH_W) 'fe/fe_gll_collocation_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_collocation_test.C'; fi` +fe/unit_tests_prof-fe_gll_lagrange_agreement_test.o: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_gll_lagrange_agreement_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_prof-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_prof-fe_gll_lagrange_agreement_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_gll_lagrange_agreement_test.o `test -f 'fe/fe_gll_lagrange_agreement_test.C' || echo '$(srcdir)/'`fe/fe_gll_lagrange_agreement_test.C + +fe/unit_tests_prof-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreement_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_gll_lagrange_agreement_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Tpo -c -o fe/unit_tests_prof-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_gll_lagrange_agreement_test.C' object='fe/unit_tests_prof-fe_gll_lagrange_agreement_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` + fe/unit_tests_prof-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Tpo -c -o fe/unit_tests_prof-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po @@ -14386,6 +14487,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po @@ -14405,6 +14507,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po @@ -14424,6 +14527,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po @@ -14443,6 +14547,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po @@ -14462,6 +14567,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po @@ -15078,6 +15184,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_hierarchic_test.Po @@ -15097,6 +15204,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_hierarchic_test.Po @@ -15116,6 +15224,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_hierarchic_test.Po @@ -15135,6 +15244,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_hierarchic_test.Po @@ -15154,6 +15264,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_lagrange_agreement_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hdiv_grad_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hermite_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_hierarchic_test.Po diff --git a/tests/fe/fe_gll_lagrange_agreement_test.C b/tests/fe/fe_gll_lagrange_agreement_test.C new file mode 100644 index 00000000000..ab371cdabca --- /dev/null +++ b/tests/fe/fe_gll_lagrange_agreement_test.C @@ -0,0 +1,168 @@ +// LAGRANGE and the Gauss-Lobatto nodal families are the same functions at orders one and two +// on the tensor product element types, because the Gauss-Lobatto points of those orders, +// {-1,1} and {-1,0,1}, are where those elements put their nodes. The two are separate +// implementations of that shared ground: LAGRANGE evaluates a closed form per order, and the +// Gauss-Lobatto basis evaluates a barycentric form against its point table. Nothing couples +// them, so this test does, by pairing each Gauss-Lobatto shape function with the LAGRANGE one +// whose node sits at the same reference point and holding the two to the same values. +// +// It is what would catch the point table, the barycentric evaluation, or the tensor index map +// drifting away from a basis whose values are already settled. + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +#include +#include + +using namespace libMesh; + +template +class FEGLLLagrangeAgreementTest : public CppUnit::TestCase +{ +protected: + std::unique_ptr _mesh; + std::string libmesh_suite_name; + +public: + void setUp() + { + _mesh = std::make_unique(*TestCommWorld); + + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + + if (dim == 1) + MeshTools::Generation::build_line(*_mesh, 1, 0., 1., elem_type); + else if (dim == 2) + MeshTools::Generation::build_square(*_mesh, 1, 1, 0., 1., 0., 1., elem_type); + else + MeshTools::Generation::build_cube(*_mesh, 1, 1, 1, 0., 1., 0., 1., 0., 1., elem_type); + } + + void tearDown() { _mesh.reset(); } + + /// The reference point that Gauss-Lobatto shape function \p i interpolates at + Point gll_point(const unsigned int i, const unsigned int dim) + { + const unsigned int n = static_cast(order) + 1; + const std::vector & pts = QGaussLobatto::points_1D(n); + + Point q; + unsigned int stride = 1; + + for (const auto d : make_range(dim)) + { + q(d) = pts[(i / stride) % n]; + stride *= n; + } + + return q; + } + + /// The node of \p elem whose reference position is \p q, or invalid_uint if it has none + unsigned int node_at(const Elem & elem, const Point & q) + { + unsigned int found = invalid_uint; + + for (const auto n : elem.node_index_range()) + if (elem.master_point(n).relative_fuzzy_equals(q, TOLERANCE)) + { + // The pairing has to be one node per shape function for the comparison to mean + // anything, so a second match is a failure rather than a choice + CPPUNIT_ASSERT_EQUAL(invalid_uint, found); + found = n; + } + + return found; + } + + void testAgreesWithLagrange() + { + LOG_UNIT_TEST; + + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + + const FEType gll_type(order, L2_LAGRANGE_GLL); + const FEType lagrange_type(order, LAGRANGE); + + // Points spread over the reference element, away from its own interpolation points, so + // that agreement is of the functions rather than of the values they are pinned to + std::vector samples; + for (int a = -3; a <= 3; ++a) + for (int b = -3; b <= 3; ++b) + for (int c = -3; c <= 3; ++c) + samples.emplace_back(a/7., (dim > 1) ? b/7. : 0., (dim > 2) ? c/7. : 0.); + + unsigned int n_paired = 0; + + for (const auto * elem : _mesh->active_local_element_ptr_range()) + { + const unsigned int n_gll = FEInterface::n_shape_functions(gll_type, elem); + const unsigned int n_lag = FEInterface::n_shape_functions(lagrange_type, elem); + + // The bases span the same space here, so they have the same count + CPPUNIT_ASSERT_EQUAL(n_lag, n_gll); + + for (const auto i : make_range(n_gll)) + { + const unsigned int n = node_at(*elem, gll_point(i, dim)); + CPPUNIT_ASSERT(n != invalid_uint); + + for (const Point & q : samples) + LIBMESH_ASSERT_FP_EQUAL(FEInterface::shape(lagrange_type, elem, n, q), + FEInterface::shape(gll_type, elem, i, q), + TOLERANCE*TOLERANCE); + + ++n_paired; + } + } + + _mesh->comm().sum(n_paired); + CPPUNIT_ASSERT(n_paired > 0); + } +}; + +#define INSTANTIATE_FEGLLAGREEMENTTEST(elemtype, order) \ + class FEGLLLagrangeAgreementTest_##order##_##elemtype : \ + public FEGLLLagrangeAgreementTest { \ + public: \ + FEGLLLagrangeAgreementTest_##order##_##elemtype() : \ + FEGLLLagrangeAgreementTest() { \ + if (unitlog->summarized_logs_enabled()) \ + this->libmesh_suite_name = "FEGLLLagrangeAgreementTest"; \ + else \ + this->libmesh_suite_name = \ + "FEGLLLagrangeAgreementTest_" #order "_" #elemtype; \ + } \ + CPPUNIT_TEST_SUITE( FEGLLLagrangeAgreementTest_##order##_##elemtype ); \ + CPPUNIT_TEST( testAgreesWithLagrange ); \ + CPPUNIT_TEST_SUITE_END(); \ + }; \ + \ + CPPUNIT_TEST_SUITE_REGISTRATION( FEGLLLagrangeAgreementTest_##order##_##elemtype ) + +// The element types whose nodes are the Gauss-Lobatto points of the order in question. The +// serendipity types are left out: LAGRANGE spans a smaller space on QUAD8 and HEX20 than a +// tensor product basis of the same order, so there is no pairing to hold there. +INSTANTIATE_FEGLLAGREEMENTTEST(EDGE2, FIRST); +INSTANTIATE_FEGLLAGREEMENTTEST(EDGE3, SECOND); + +#if LIBMESH_DIM > 1 +INSTANTIATE_FEGLLAGREEMENTTEST(QUAD4, FIRST); +INSTANTIATE_FEGLLAGREEMENTTEST(QUAD9, SECOND); +#endif + +#if LIBMESH_DIM > 2 +INSTANTIATE_FEGLLAGREEMENTTEST(HEX8, FIRST); +INSTANTIATE_FEGLLAGREEMENTTEST(HEX27, SECOND); +#endif From 0bec548f391818a5c2d524559299c75fed4f6164 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 10:33:27 -0700 Subject: [PATCH 23/27] Add the LAGRANGE_GLL family The continuous nodal basis on the Gauss-Lobatto points, collocated with the Gauss-Lobatto rule of its order as the L2 family already is, so its mass matrix is diagonal. It is diagonal globally and not only per element, since the map from a degree of freedom to the point it interpolates at is one to one. The degrees of freedom are distributed as HIERARCHIC distributes its own, one per vertex, p-1 per edge, (p-1)^2 per face and the rest on the element, so the element needs a node for each entity that owns any. That is what limits the order a type reaches: without mid-edge nodes an edge's degrees of freedom have nowhere to sit, so QUAD4 and HEX8 stop at order one, and in three dimensions a face owns degrees of freedom too, so HEX20 stops there as well while HEX27 does not. Interior degrees of freedom belong to the element, so no type needs an interior node and QUAD8 reaches any order. Two elements sharing an entity have to agree on which point each of its degrees of freedom sits at, and each numbers that entity's vertices its own way. Rather than enumerate the symmetries, the index is built from the vertices themselves: a vertex of a tensor product element sits at -1 or 1 in each coordinate, so it converts straight to a tensor index, and an edge or face degree of freedom is that index stepped along the entity from a corner both elements pick out. Elem::edge_orientation names the lesser end of an edge, and Elem::face_orientation the least vertex of a face together with the direction the rest run from it, which is an origin and two axes. So one expression covers every edge and every face of every tensor product element instead of one case apiece. extra_hanging_dofs is true, with HIERARCHIC and the other continuous high order families rather than with LAGRANGE. Past order two none of the points a mid-edge or mid-face node owns is the node itself, so that node cannot double as a vertex for the elements meeting it at a refinement interface and needs a degree of freedom of its own there. Co-Authored-By: Claude --- Makefile.in | 81 ++++++- include/enums/enum_fe_family.h | 1 + include/fe/fe_lagrange_gll_shape.h | 182 ++++++++++++++++ include/fe/fe_macro.h | 2 + src/fe/fe_abstract.C | 12 ++ src/fe/fe_base.C | 12 ++ src/fe/fe_boundary.C | 2 + src/fe/fe_interface.C | 11 + src/fe/fe_lagrange_gll.C | 326 +++++++++++++++++++++++++++++ src/fe/fe_lagrange_gll_shape_0D.C | 113 +++++++++- src/fe/fe_lagrange_gll_shape_1D.C | 132 +++++++++++- src/fe/fe_lagrange_gll_shape_2D.C | 132 +++++++++++- src/fe/fe_lagrange_gll_shape_3D.C | 132 +++++++++++- src/fe/fe_transformation_base.C | 1 + src/fe/fe_type.C | 2 +- src/libmesh_SOURCES | 1 + src/utils/string_to_enum.C | 1 + 17 files changed, 1133 insertions(+), 10 deletions(-) create mode 100644 src/fe/fe_lagrange_gll.C diff --git a/Makefile.in b/Makefile.in index b64ad5b3f98..7108a5bf105 100644 --- a/Makefile.in +++ b/Makefile.in @@ -326,7 +326,7 @@ am__libmesh_dbg_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ - src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll.C src/fe/fe_lagrange_gll_shape_0D.C \ src/fe/fe_lagrange_gll_shape_1D.C \ src/fe/fe_lagrange_gll_shape_2D.C \ src/fe/fe_lagrange_gll_shape_3D.C \ @@ -679,6 +679,7 @@ am__objects_1 = src/base/libmesh_dbg_la-dirichlet_boundary.lo \ src/fe/libmesh_dbg_la-fe_l2_lagrange.lo \ src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_dbg_la-fe_lagrange.lo \ + src/fe/libmesh_dbg_la-fe_lagrange_gll.lo \ src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo \ src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo \ src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_2D.lo \ @@ -1150,7 +1151,7 @@ am__libmesh_devel_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ - src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll.C src/fe/fe_lagrange_gll_shape_0D.C \ src/fe/fe_lagrange_gll_shape_1D.C \ src/fe/fe_lagrange_gll_shape_2D.C \ src/fe/fe_lagrange_gll_shape_3D.C \ @@ -1502,6 +1503,7 @@ am__objects_2 = src/base/libmesh_devel_la-dirichlet_boundary.lo \ src/fe/libmesh_devel_la-fe_l2_lagrange.lo \ src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_devel_la-fe_lagrange.lo \ + src/fe/libmesh_devel_la-fe_lagrange_gll.lo \ src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo \ src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo \ src/fe/libmesh_devel_la-fe_lagrange_gll_shape_2D.lo \ @@ -1970,7 +1972,7 @@ am__libmesh_oprof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ - src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll.C src/fe/fe_lagrange_gll_shape_0D.C \ src/fe/fe_lagrange_gll_shape_1D.C \ src/fe/fe_lagrange_gll_shape_2D.C \ src/fe/fe_lagrange_gll_shape_3D.C \ @@ -2322,6 +2324,7 @@ am__objects_3 = src/base/libmesh_oprof_la-dirichlet_boundary.lo \ src/fe/libmesh_oprof_la-fe_l2_lagrange.lo \ src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_oprof_la-fe_lagrange.lo \ + src/fe/libmesh_oprof_la-fe_lagrange_gll.lo \ src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo \ src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo \ src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_2D.lo \ @@ -2790,7 +2793,7 @@ am__libmesh_opt_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ - src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll.C src/fe/fe_lagrange_gll_shape_0D.C \ src/fe/fe_lagrange_gll_shape_1D.C \ src/fe/fe_lagrange_gll_shape_2D.C \ src/fe/fe_lagrange_gll_shape_3D.C \ @@ -3142,6 +3145,7 @@ am__objects_4 = src/base/libmesh_opt_la-dirichlet_boundary.lo \ src/fe/libmesh_opt_la-fe_l2_lagrange.lo \ src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_opt_la-fe_lagrange.lo \ + src/fe/libmesh_opt_la-fe_lagrange_gll.lo \ src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo \ src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo \ src/fe/libmesh_opt_la-fe_lagrange_gll_shape_2D.lo \ @@ -3609,7 +3613,7 @@ am__libmesh_prof_la_SOURCES_DIST = src/base/dirichlet_boundary.C \ src/fe/fe_interface.C src/fe/fe_interface_inf_fe.C \ src/fe/fe_l2_hierarchic.C src/fe/fe_l2_lagrange.C \ src/fe/fe_l2_lagrange_gll.C src/fe/fe_lagrange.C \ - src/fe/fe_lagrange_gll_shape_0D.C \ + src/fe/fe_lagrange_gll.C src/fe/fe_lagrange_gll_shape_0D.C \ src/fe/fe_lagrange_gll_shape_1D.C \ src/fe/fe_lagrange_gll_shape_2D.C \ src/fe/fe_lagrange_gll_shape_3D.C \ @@ -3961,6 +3965,7 @@ am__objects_5 = src/base/libmesh_prof_la-dirichlet_boundary.lo \ src/fe/libmesh_prof_la-fe_l2_lagrange.lo \ src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo \ src/fe/libmesh_prof_la-fe_lagrange.lo \ + src/fe/libmesh_prof_la-fe_lagrange_gll.lo \ src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo \ src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo \ src/fe/libmesh_prof_la-fe_lagrange_gll_shape_2D.lo \ @@ -5244,6 +5249,7 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo \ @@ -5337,6 +5343,7 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo \ @@ -5430,6 +5437,7 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo \ @@ -5523,6 +5531,7 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo \ @@ -5616,6 +5625,7 @@ am__depfiles_remade = src/apps/$(DEPDIR)/amr_dbg-amr.Po \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo \ + src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo \ src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo \ @@ -8221,6 +8231,7 @@ libmesh_SOURCES = \ src/fe/fe_l2_lagrange.C \ src/fe/fe_l2_lagrange_gll.C \ src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll.C \ src/fe/fe_lagrange_gll_shape_0D.C \ src/fe/fe_lagrange_gll_shape_1D.C \ src/fe/fe_lagrange_gll_shape_2D.C \ @@ -9353,6 +9364,8 @@ src/fe/libmesh_dbg_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_dbg_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_dbg_la-fe_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_1D.lo: \ @@ -10612,6 +10625,8 @@ src/fe/libmesh_devel_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_devel_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_devel_la-fe_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_devel_la-fe_lagrange_gll_shape_1D.lo: \ @@ -11796,6 +11811,8 @@ src/fe/libmesh_oprof_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_oprof_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_oprof_la-fe_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_1D.lo: \ @@ -12980,6 +12997,8 @@ src/fe/libmesh_opt_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_opt_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_opt_la-fe_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_opt_la-fe_lagrange_gll_shape_1D.lo: \ @@ -14161,6 +14180,8 @@ src/fe/libmesh_prof_la-fe_l2_lagrange_gll.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_prof_la-fe_lagrange.lo: src/fe/$(am__dirstamp) \ src/fe/$(DEPDIR)/$(am__dirstamp) +src/fe/libmesh_prof_la-fe_lagrange_gll.lo: src/fe/$(am__dirstamp) \ + src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo: \ src/fe/$(am__dirstamp) src/fe/$(DEPDIR)/$(am__dirstamp) src/fe/libmesh_prof_la-fe_lagrange_gll_shape_1D.lo: \ @@ -16095,6 +16116,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker @@ -16188,6 +16210,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker @@ -16281,6 +16304,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker @@ -16374,6 +16398,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker @@ -16467,6 +16492,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo@am__quote@ # am--include-marker @@ -18793,6 +18819,13 @@ src/fe/libmesh_dbg_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_dbg_la-fe_lagrange_gll.lo: src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll.C' object='src/fe/libmesh_dbg_la-fe_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C + src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_dbg_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_dbg_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_dbg_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo @@ -22160,6 +22193,13 @@ src/fe/libmesh_devel_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_devel_la-fe_lagrange_gll.lo: src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll.C' object='src/fe/libmesh_devel_la-fe_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_devel_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C + src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_devel_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_devel_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_devel_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo @@ -25527,6 +25567,13 @@ src/fe/libmesh_oprof_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_oprof_la-fe_lagrange_gll.lo: src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll.C' object='src/fe/libmesh_oprof_la-fe_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C + src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_oprof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_oprof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_oprof_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo @@ -28894,6 +28941,13 @@ src/fe/libmesh_opt_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_opt_la-fe_lagrange_gll.lo: src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll.C' object='src/fe/libmesh_opt_la-fe_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_opt_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C + src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_opt_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_opt_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_opt_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo @@ -32261,6 +32315,13 @@ src/fe/libmesh_prof_la-fe_lagrange.lo: src/fe/fe_lagrange.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_lagrange.lo `test -f 'src/fe/fe_lagrange.C' || echo '$(srcdir)/'`src/fe/fe_lagrange.C +src/fe/libmesh_prof_la-fe_lagrange_gll.lo: src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange_gll.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/fe/fe_lagrange_gll.C' object='src/fe/libmesh_prof_la-fe_lagrange_gll.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -c -o src/fe/libmesh_prof_la-fe_lagrange_gll.lo `test -f 'src/fe/fe_lagrange_gll.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll.C + src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo: src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmesh_prof_la_CPPFLAGS) $(CPPFLAGS) $(libmesh_prof_la_CXXFLAGS) $(CXXFLAGS) -MT src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo -MD -MP -MF src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Tpo -c -o src/fe/libmesh_prof_la-fe_lagrange_gll_shape_0D.lo `test -f 'src/fe/fe_lagrange_gll_shape_0D.C' || echo '$(srcdir)/'`src/fe/fe_lagrange_gll_shape_0D.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Tpo src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo @@ -37050,6 +37111,7 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo @@ -37143,6 +37205,7 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo @@ -37236,6 +37299,7 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo @@ -37329,6 +37393,7 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo @@ -37422,6 +37487,7 @@ distclean: distclean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo @@ -39586,6 +39652,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_dbg_la-fe_lagrange_gll_shape_2D.Plo @@ -39679,6 +39746,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_devel_la-fe_lagrange_gll_shape_2D.Plo @@ -39772,6 +39840,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_oprof_la-fe_lagrange_gll_shape_2D.Plo @@ -39865,6 +39934,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_opt_la-fe_lagrange_gll_shape_2D.Plo @@ -39958,6 +40028,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_l2_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange.Plo + -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_0D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_1D.Plo -rm -f src/fe/$(DEPDIR)/libmesh_prof_la-fe_lagrange_gll_shape_2D.Plo diff --git a/include/enums/enum_fe_family.h b/include/enums/enum_fe_family.h index 0de87c3a3b6..567dfb338cb 100644 --- a/include/enums/enum_fe_family.h +++ b/include/enums/enum_fe_family.h @@ -72,6 +72,7 @@ enum FEFamily : int { // Nodal basis functions on the Gauss-Lobatto points, which are // collocated with the Gauss-Lobatto quadrature rule of the same order L2_LAGRANGE_GLL = 81, + LAGRANGE_GLL = 82, // Invalid INVALID_FE = 99}; diff --git a/include/fe/fe_lagrange_gll_shape.h b/include/fe/fe_lagrange_gll_shape.h index 3b925f1ad26..eb35c05b06b 100644 --- a/include/fe/fe_lagrange_gll_shape.h +++ b/include/fe/fe_lagrange_gll_shape.h @@ -20,10 +20,14 @@ #define LIBMESH_FE_LAGRANGE_GLL_SHAPE_H // Local includes +#include "libmesh/elem.h" #include "libmesh/enum_fe_family.h" #include "libmesh/enum_order.h" #include "libmesh/fe_lagrange_gll_shape_1D.h" +// C++ includes +#include + // The tensor product that the Gauss-Lobatto nodal families on the tensor product element // types build their shape functions from. The families differ in which tensor index a shape // function index names, and in nothing else, so the evaluation lives here once. @@ -100,6 +104,184 @@ inline void fe_lagrange_gll_tensor_index(const Elem *, libmesh_assert_less (i, stride); } +/** + * Fills the leading \p dim entries of \p indices with the tensor index of vertex \p v. + * + * A vertex of a tensor product element sits at -1 or 1 in each coordinate of the reference + * element, which is the first or the last of the interpolation points along it. + */ +inline void fe_lagrange_gll_vertex_index(const Elem & elem, + const unsigned int degree, + const unsigned int dim, + const unsigned int v, + unsigned int * indices) +{ + const Point q = elem.master_point(v); + + for (unsigned int d = 0; d != dim; ++d) + { + libmesh_assert_equal_to (std::abs(q(d)), 1.); + indices[d] = (q(d) > 0.) ? degree : 0; + } +} + + +/** + * Fills \p indices with the tensor index reached by stepping \p step interpolation points from + * the vertex whose index is \p from toward the vertex whose index is \p to. + * + * The two vertices are the ends of an edge, so they differ in one coordinate, and stepping + * along it counts up from \p from or down from it according to which end it is. Deriving the + * step from the vertices rather than from a table per edge is what keeps one expression + * standing for every edge of every tensor product element. + */ +inline void fe_lagrange_gll_step_index(const unsigned int degree, + const unsigned int dim, + const unsigned int * from, + const unsigned int * to, + const unsigned int step, + unsigned int * indices) +{ + unsigned int n_moved = 0; + + for (unsigned int d = 0; d != dim; ++d) + if (from[d] != to[d]) + { + indices[d] = (to[d] == degree) ? step : (degree - step); + ++n_moved; + } + + // The ends of an edge of a tensor product element differ in one coordinate, and the caller + // relies on that to lay independent steps over each other + libmesh_assert_equal_to (n_moved, 1u); +} + + +/** + * The LAGRANGE_GLL degrees of freedom are distributed as HIERARCHIC distributes its own: one + * on each vertex, degree-1 on each edge, (degree-1)^2 on each face, and the rest on the + * element. libMesh numbers them by node, in node order, and then the element's own, so a + * shape function index names an entity and a position within it. + * + * Two elements sharing an entity have to agree on which interpolation point each of its + * degrees of freedom sits at, and each numbers that entity's vertices its own way. The + * agreement comes from Elem::edge_orientation and Elem::face_orientation, which both elements + * compute from the positions of the same vertices: an edge is walked from its lesser end, and + * a face from its least vertex along the lesser of the two edges leaving it. + */ +template <> +inline void fe_lagrange_gll_tensor_index(const Elem * elem, + const Order order, + const unsigned int dim, + const unsigned int i, + unsigned int * indices) +{ + libmesh_assert(elem); + + const unsigned int degree = static_cast(order); + const unsigned int n_v = elem->n_vertices(); + + if (i < n_v) + { + fe_lagrange_gll_vertex_index(*elem, degree, dim, i, indices); + return; + } + + // Below a vertex apiece there is nothing else to hold + libmesh_assert_greater (degree, 1); + + const unsigned int per_edge = degree - 1; + + // An edge element has no edges of its own, so what follows its vertices is its interior + if (dim == 1) + { + indices[0] = i - n_v + 1; + libmesh_assert_less (indices[0], degree); + return; + } + + const unsigned int n_e = elem->n_edges(); + + if (i < n_v + n_e * per_edge) + { + const unsigned int e = (i - n_v) / per_edge; + const unsigned int k = (i - n_v) % per_edge; + + // The node carrying this edge's degrees of freedom follows the vertices in node order + libmesh_assert (elem->is_node_on_edge(n_v + e, e)); + + // edge_orientation reports whether the edge's own first vertex is the greater of the + // two, so walking from the lesser means starting at the second when it does + const bool reversed = elem->edge_orientation(e); + + unsigned int from[3], to[3]; + fe_lagrange_gll_vertex_index(*elem, degree, dim, + elem->local_edge_node(e, reversed ? 1 : 0), from); + fe_lagrange_gll_vertex_index(*elem, degree, dim, + elem->local_edge_node(e, reversed ? 0 : 1), to); + + for (unsigned int d = 0; d != dim; ++d) + indices[d] = from[d]; + + fe_lagrange_gll_step_index(degree, dim, from, to, k + 1, indices); + return; + } + + const unsigned int per_face = per_edge * per_edge; + const unsigned int after_edges = n_v + n_e * per_edge; + const unsigned int n_f = (dim > 2) ? elem->n_faces() : 0; + + if (i < after_edges + n_f * per_face) + { + const unsigned int f = (i - after_edges) / per_face; + const unsigned int m = (i - after_edges) % per_face; + + // The node carrying this face's degrees of freedom follows the edge nodes + libmesh_assert (elem->is_node_on_side(n_v + n_e + f, f)); + + const std::vector face_nodes = elem->nodes_on_side(f); + const unsigned int n_fv = Elem::type_to_n_sides_map[elem->side_type(f)]; + + // face_orientation carries twice the position of the face's least vertex plus one when + // the vertex after it is the lesser of its two neighbors + const unsigned int orientation = elem->face_orientation(f); + const unsigned int least = orientation / 2; + const bool forward = orientation % 2; + + const unsigned int origin = face_nodes[least]; + const unsigned int after = face_nodes[(least + 1) % n_fv]; + const unsigned int before = face_nodes[(least + n_fv - 1) % n_fv]; + + unsigned int from[3], first[3], second[3]; + fe_lagrange_gll_vertex_index(*elem, degree, dim, origin, from); + fe_lagrange_gll_vertex_index(*elem, degree, dim, forward ? before : after, first); + fe_lagrange_gll_vertex_index(*elem, degree, dim, forward ? after : before, second); + + for (unsigned int d = 0; d != dim; ++d) + indices[d] = from[d]; + + // The face's two directions move different coordinates, and the third holds the value + // the whole face shares, so the two steps do not tread on each other + fe_lagrange_gll_step_index(degree, dim, from, first, m % per_edge + 1, indices); + fe_lagrange_gll_step_index(degree, dim, from, second, m / per_edge + 1, indices); + return; + } + + // What is left belongs to the element, and runs over the interior of the tensor grid in + // lexicographic order with the first coordinate varying fastest + const unsigned int m = i - (after_edges + n_f * per_face); + unsigned int stride = 1; + + for (unsigned int d = 0; d != dim; ++d) + { + indices[d] = (m / stride) % per_edge + 1; + stride *= per_edge; + } + + libmesh_assert_less (m, stride); +} + + /** * \returns The \p Dim dimensional tensor product of one-dimensional Gauss-Lobatto nodal shape * functions that shape function \p i of family \p T names, differentiated once in each diff --git a/include/fe/fe_macro.h b/include/fe/fe_macro.h index 3b1b0d90789..53f90301ea2 100644 --- a/include/fe/fe_macro.h +++ b/include/fe/fe_macro.h @@ -81,6 +81,7 @@ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_VEC>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_GLL>; \ + template class LIBMESH_EXPORT FE< (_dim), LAGRANGE_GLL>; \ template class LIBMESH_EXPORT FE< (_dim), MONOMIAL>; \ template class LIBMESH_EXPORT FE< (_dim), SCALAR>; \ template class LIBMESH_EXPORT FE< (_dim), SIDE_HIERARCHIC>; \ @@ -104,6 +105,7 @@ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_VEC>; \ template class LIBMESH_EXPORT FE< (_dim), L2_LAGRANGE_GLL>; \ + template class LIBMESH_EXPORT FE< (_dim), LAGRANGE_GLL>; \ template class LIBMESH_EXPORT FE< (_dim), MONOMIAL>; \ template class LIBMESH_EXPORT FE< (_dim), SCALAR>; \ template class LIBMESH_EXPORT FE< (_dim), SIDE_HIERARCHIC>; \ diff --git a/src/fe/fe_abstract.C b/src/fe/fe_abstract.C index e207ce348a9..12970acaf41 100644 --- a/src/fe/fe_abstract.C +++ b/src/fe/fe_abstract.C @@ -103,6 +103,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); @@ -183,6 +186,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); @@ -265,6 +271,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); @@ -347,6 +356,9 @@ std::unique_ptr FEAbstract::build(const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case L2_LAGRANGE_VEC: return std::make_unique>(fet); diff --git a/src/fe/fe_base.C b/src/fe/fe_base.C index db9145feadd..c37632da557 100644 --- a/src/fe/fe_base.C +++ b/src/fe/fe_base.C @@ -213,6 +213,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); @@ -266,6 +269,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); @@ -321,6 +327,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); @@ -379,6 +388,9 @@ FEGenericBase::build (const unsigned int dim, case L2_LAGRANGE_GLL: return std::make_unique>(fet); + case LAGRANGE_GLL: + return std::make_unique>(fet); + case HIERARCHIC: return std::make_unique>(fet); diff --git a/src/fe/fe_boundary.C b/src/fe/fe_boundary.C index 2e9e1e93a40..452ca2575bd 100644 --- a/src/fe/fe_boundary.C +++ b/src/fe/fe_boundary.C @@ -80,6 +80,7 @@ LIBMESH_ERRORS_IN_LOW_D(SIDE_HIERARCHIC) LIBMESH_ERRORS_IN_LOW_D(LAGRANGE) LIBMESH_ERRORS_IN_LOW_D(L2_LAGRANGE) LIBMESH_ERRORS_IN_LOW_D(L2_LAGRANGE_GLL) +LIBMESH_ERRORS_IN_LOW_D(LAGRANGE_GLL) LIBMESH_ERRORS_IN_LOW_D(LAGRANGE_VEC) LIBMESH_ERRORS_IN_LOW_D(L2_LAGRANGE_VEC) LIBMESH_ERRORS_IN_LOW_D(MONOMIAL) @@ -1166,6 +1167,7 @@ REINIT_AND_SIDE_MAPS(LAGRANGE); REINIT_AND_SIDE_MAPS(LAGRANGE_VEC); REINIT_AND_SIDE_MAPS(L2_LAGRANGE); REINIT_AND_SIDE_MAPS(L2_LAGRANGE_GLL); +REINIT_AND_SIDE_MAPS(LAGRANGE_GLL); REINIT_AND_SIDE_MAPS(L2_LAGRANGE_VEC); REINIT_AND_SIDE_MAPS(HIERARCHIC); REINIT_AND_SIDE_MAPS(HIERARCHIC_VEC); diff --git a/src/fe/fe_interface.C b/src/fe/fe_interface.C index b18e28d5198..c4a6c62f229 100644 --- a/src/fe/fe_interface.C +++ b/src/fe/fe_interface.C @@ -96,6 +96,7 @@ FEInterface::is_InfFE_elem(const ElemType et) fe_family_case_func(LAGRANGE, dim, func_and_args, prefix, suffix) \ fe_family_case_func(L2_LAGRANGE, dim, func_and_args, prefix, suffix) \ fe_family_case_func(L2_LAGRANGE_GLL, dim, func_and_args, prefix, suffix) \ + fe_family_case_func(LAGRANGE_GLL, dim, func_and_args, prefix, suffix) \ fe_family_case_func(MONOMIAL, dim, func_and_args, prefix, suffix) \ fe_family_case_func(SCALAR, dim, func_and_args, prefix, suffix) \ fe_family_case_func(XYZ, dim, func_and_args, prefix, suffix) \ @@ -111,6 +112,7 @@ FEInterface::is_InfFE_elem(const ElemType et) fe_family_case(LAGRANGE) \ fe_family_case(L2_LAGRANGE) \ fe_family_case(L2_LAGRANGE_GLL) \ + fe_family_case(LAGRANGE_GLL) \ fe_family_case(MONOMIAL) \ fe_family_case(SCALAR) \ fe_family_case(XYZ) \ @@ -2204,6 +2206,7 @@ unsigned int FEInterface::max_order(const FEType & fe_t, } break; case L2_LAGRANGE_GLL: + case LAGRANGE_GLL: switch (el_t) { case EDGE2: @@ -2660,6 +2663,11 @@ bool FEInterface::extra_hanging_dofs(const FEType & fe_t) case HIERARCHIC: case HIERARCHIC_VEC: case L2_HIERARCHIC_VEC: + // A mid-edge or mid-face node of this family owns the interpolation points inside its + // entity, and past order two none of those is the node itself, so the node cannot serve + // as a vertex for the elements meeting it at a refinement interface and needs a degree + // of freedom of its own there + case LAGRANGE_GLL: fe_family_horder_case() default: return true; @@ -2689,6 +2697,7 @@ bool FEInterface::orientation_dependent (const FEFamily & fe_family) case HIERARCHIC: case L2_HIERARCHIC: case HIERARCHIC_VEC: + case LAGRANGE_GLL: case L2_HIERARCHIC_VEC: case BERNSTEIN: case RATIONAL_BERNSTEIN: @@ -2732,6 +2741,7 @@ FEInterface::is_hierarchic (const FEType & fe_type) case CLOUGH: // maybe some day? case LAGRANGE: case LAGRANGE_VEC: + case LAGRANGE_GLL: case L2_LAGRANGE: case L2_LAGRANGE_GLL: case L2_LAGRANGE_VEC: @@ -2769,6 +2779,7 @@ FEContinuity FEInterface::get_continuity(const FEType & fe_type) // C0 elements case LAGRANGE: + case LAGRANGE_GLL: case HIERARCHIC: case BERNSTEIN: case SZABAB: diff --git a/src/fe/fe_lagrange_gll.C b/src/fe/fe_lagrange_gll.C new file mode 100644 index 00000000000..c01e6d8c88e --- /dev/null +++ b/src/fe/fe_lagrange_gll.C @@ -0,0 +1,326 @@ +// The libMesh Finite Element Library. +// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library 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 +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + +// Local includes +#include "libmesh/elem.h" +#include "libmesh/enum_to_string.h" +#include "libmesh/fe.h" +#include "libmesh/fe_interface.h" +#include "libmesh/fe_macro.h" +#include "libmesh/quadrature_gauss_lobatto.h" + + +namespace libMesh +{ + +/** + * \returns The number of degrees of freedom that the LAGRANGE_GLL basis of order \p o carries + * on an element of type \p t. + * + * The basis is a tensor product, so it lives on the tensor product element types alone, and + * carries \f$(p+1)^d\f$ degrees of freedom on one of those. + * + * The element has to have a node for each entity that owns degrees of freedom, which is what + * limits the order some types reach. A vertex owns one and an edge owns p-1, so a type without + * mid-edge nodes stops at order one. A face owns \f$(p-1)^2\f$, so in three dimensions a type + * without face nodes stops there too. Interior degrees of freedom belong to the element rather + * than to a node, so no type needs an interior node, and these are the same limits HIERARCHIC + * carries for the same reason. + */ +unsigned int lagrange_gll_n_dofs(const ElemType t, const Order o) +{ + libmesh_assert_greater (o, 0); + + const unsigned int n = static_cast(o) + 1; + + libmesh_error_msg_if(n > QGaussLobatto::max_points_1D, + "The LAGRANGE_GLL basis of order " << o << " would interpolate at " + << n << " Gauss-Lobatto points, and they are tabulated up to " + << QGaussLobatto::max_points_1D << "."); + + switch (t) + { + case NODEELEM: + return 1; + + // An edge owns no entity between its vertices and its interior, so it needs no node + // beyond them at any order + case EDGE2: + case EDGE3: + case EDGE4: + return n; + + // Without mid-edge nodes there is nowhere to put an edge's degrees of freedom + case QUAD4: + case QUADSHELL4: + libmesh_error_msg_if(o > FIRST, + "The LAGRANGE_GLL basis of order " << o << " puts " << o - 1 + << " degrees of freedom on each edge, and " + << Utility::enum_to_string(t) << " has no mid-edge node to own them. " + "QUAD8 or QUAD9 does."); + libmesh_fallthrough(); + case QUAD8: + case QUADSHELL8: + case QUAD9: + case QUADSHELL9: + return n*n; + + // In three dimensions a face owns degrees of freedom as well, so a type needs face + // nodes and not only mid-edge ones + case HEX8: + libmesh_error_msg_if(o > FIRST, + "The LAGRANGE_GLL basis of order " << o + << " puts degrees of freedom on the edges and faces of a hexahedron, " + "and HEX8 has no node to own them. HEX27 does."); + libmesh_fallthrough(); + case HEX20: + libmesh_error_msg_if(o > FIRST, + "The LAGRANGE_GLL basis of order " << o << " puts " << (o - 1)*(o - 1) + << " degrees of freedom on each face, and HEX20 has no face node to " + "own them. HEX27 does."); + libmesh_fallthrough(); + case HEX27: + return n*n*n; + + case INVALID_ELEM: + return 0; + + default: + libmesh_error_msg("The LAGRANGE_GLL basis is a tensor product, so it has no form on " + << Utility::enum_to_string(t) << "."); + } +} + + +unsigned int lagrange_gll_n_dofs(const Elem * e, const Order o) +{ + libmesh_assert(e); + return lagrange_gll_n_dofs(e->type(), o); +} + +/** + * \returns The number of degrees of freedom that node \p n of an element of type \p t owns. + * + * A vertex owns the one whose interpolation point it is. A mid-edge node owns the p-1 points + * inside its edge, and a mid-face node the \f$(p-1)^2\f$ inside its face. An interior node owns + * none: those points belong to the element, which is what lets static condensation reach them + * and what keeps a type without an interior node usable. + */ +unsigned int lagrange_gll_n_dofs_at_node(const ElemType t, + const Order o, + const unsigned int n) +{ + libmesh_assert_greater (o, 0); + + const unsigned int per_edge = static_cast(o) - 1; + + switch (t) + { + case NODEELEM: + return 1; + + case EDGE2: + case EDGE3: + case EDGE4: + return (n < 2) ? 1 : 0; + + case QUAD4: + case QUADSHELL4: + libmesh_assert_less (n, 4); + libmesh_fallthrough(); + case QUAD8: + case QUADSHELL8: + case QUAD9: + case QUADSHELL9: + if (n < 4) + return 1; + if (n < 8) + return per_edge; + return 0; + + case HEX8: + libmesh_assert_less (n, 8); + libmesh_fallthrough(); + case HEX20: + case HEX27: + if (n < 8) + return 1; + if (n < 20) + return per_edge; + if (n < 26) + return per_edge * per_edge; + return 0; + + case INVALID_ELEM: + return 0; + + default: + libmesh_error_msg("The LAGRANGE_GLL basis is a tensor product, so it has no form on " + << Utility::enum_to_string(t) << "."); + } +} + +/** + * \returns The number of degrees of freedom that the element itself owns, which are the + * interpolation points interior to it: \f$(p-1)^d\f$ of them. + */ +unsigned int lagrange_gll_n_dofs_per_elem(const ElemType t, const Order o) +{ + libmesh_assert_greater (o, 0); + + const unsigned int per_edge = static_cast(o) - 1; + + switch (t) + { + case NODEELEM: + case INVALID_ELEM: + return 0; + + case EDGE2: + case EDGE3: + case EDGE4: + return per_edge; + + case QUAD4: + case QUADSHELL4: + case QUAD8: + case QUADSHELL8: + case QUAD9: + case QUADSHELL9: + return per_edge * per_edge; + + case HEX8: + case HEX20: + case HEX27: + return per_edge * per_edge * per_edge; + + default: + libmesh_error_msg("The LAGRANGE_GLL basis is a tensor product, so it has no form on " + << Utility::enum_to_string(t) << "."); + } +} + + +/** + * Evaluates a solution at the nodes of \p elem, for the writers that report a variable there. + * + * The vertex coefficients are already values at their nodes, but past order two the remaining + * interpolation points are not nodes, so the values at the nodes are interpolated rather than + * read off. + */ +void lagrange_gll_nodal_soln(const Elem * elem, + const Order order, + const std::vector & elem_soln, + std::vector & nodal_soln, + const bool add_p_level) +{ + const unsigned int n_nodes = elem->n_nodes(); + + nodal_soln.resize(n_nodes); + + const FEType fe_type(order, LAGRANGE_GLL); + + const unsigned int n_sf = + FEInterface::n_shape_functions(fe_type, elem, add_p_level); + + std::vector refspace_nodes; + FEBase::get_refspace_nodes(elem->type(), refspace_nodes); + libmesh_assert_equal_to (refspace_nodes.size(), n_nodes); + libmesh_assert_equal_to (elem_soln.size(), n_sf); + + std::fill(nodal_soln.begin(), nodal_soln.end(), 0); + + for (const auto n : make_range(n_nodes)) + for (const auto i : make_range(n_sf)) + nodal_soln[n] += elem_soln[i] * + FEInterface::shape(fe_type, elem, i, refspace_nodes[n], add_p_level); +} + +LIBMESH_FE_NODAL_SOLN(LAGRANGE_GLL, lagrange_gll_nodal_soln) +LIBMESH_FE_SIDE_NODAL_SOLN(LAGRANGE_GLL) + + +template <> unsigned int FE<0,LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<1,LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<2,LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return lagrange_gll_n_dofs(t, o); } +template <> unsigned int FE<3,LAGRANGE_GLL>::n_dofs(const ElemType t, const Order o) { return lagrange_gll_n_dofs(t, o); } + +template <> unsigned int FE<0,LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return lagrange_gll_n_dofs(e, o); } +template <> unsigned int FE<1,LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return lagrange_gll_n_dofs(e, o); } +template <> unsigned int FE<2,LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return lagrange_gll_n_dofs(e, o); } +template <> unsigned int FE<3,LAGRANGE_GLL>::n_dofs(const Elem * e, const Order o) { return lagrange_gll_n_dofs(e, o); } + +template <> unsigned int FE<0,LAGRANGE_GLL>::n_dofs_at_node(const ElemType t, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(t, o, n); } +template <> unsigned int FE<1,LAGRANGE_GLL>::n_dofs_at_node(const ElemType t, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(t, o, n); } +template <> unsigned int FE<2,LAGRANGE_GLL>::n_dofs_at_node(const ElemType t, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(t, o, n); } +template <> unsigned int FE<3,LAGRANGE_GLL>::n_dofs_at_node(const ElemType t, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(t, o, n); } + +template <> unsigned int FE<0,LAGRANGE_GLL>::n_dofs_at_node(const Elem & e, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(e.type(), o, n); } +template <> unsigned int FE<1,LAGRANGE_GLL>::n_dofs_at_node(const Elem & e, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(e.type(), o, n); } +template <> unsigned int FE<2,LAGRANGE_GLL>::n_dofs_at_node(const Elem & e, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(e.type(), o, n); } +template <> unsigned int FE<3,LAGRANGE_GLL>::n_dofs_at_node(const Elem & e, const Order o, const unsigned int n) { return lagrange_gll_n_dofs_at_node(e.type(), o, n); } + +template <> unsigned int FE<0,LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return lagrange_gll_n_dofs_per_elem(t, o); } +template <> unsigned int FE<1,LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return lagrange_gll_n_dofs_per_elem(t, o); } +template <> unsigned int FE<2,LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return lagrange_gll_n_dofs_per_elem(t, o); } +template <> unsigned int FE<3,LAGRANGE_GLL>::n_dofs_per_elem(const ElemType t, const Order o) { return lagrange_gll_n_dofs_per_elem(t, o); } + +template <> unsigned int FE<0,LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return lagrange_gll_n_dofs_per_elem(e.type(), o); } +template <> unsigned int FE<1,LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return lagrange_gll_n_dofs_per_elem(e.type(), o); } +template <> unsigned int FE<2,LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return lagrange_gll_n_dofs_per_elem(e.type(), o); } +template <> unsigned int FE<3,LAGRANGE_GLL>::n_dofs_per_elem(const Elem & e, const Order o) { return lagrange_gll_n_dofs_per_elem(e.type(), o); } + +// A nodal basis on the Gauss-Lobatto points is continuous across a shared entity +// because the two elements agree on which point each shared degree of freedom sits at +template <> FEContinuity FE<0,LAGRANGE_GLL>::get_continuity() const { return C_ZERO; } +template <> FEContinuity FE<1,LAGRANGE_GLL>::get_continuity() const { return C_ZERO; } +template <> FEContinuity FE<2,LAGRANGE_GLL>::get_continuity() const { return C_ZERO; } +template <> FEContinuity FE<3,LAGRANGE_GLL>::get_continuity() const { return C_ZERO; } + +// A nodal basis is not hierarchic +template <> bool FE<0,LAGRANGE_GLL>::is_hierarchic() const { return false; } +template <> bool FE<1,LAGRANGE_GLL>::is_hierarchic() const { return false; } +template <> bool FE<2,LAGRANGE_GLL>::is_hierarchic() const { return false; } +template <> bool FE<3,LAGRANGE_GLL>::is_hierarchic() const { return false; } + +// The shape functions follow the orientation of the entity owning each degree of +// freedom, so an element whose entities are oriented differently needs them again +template <> bool FE<0,LAGRANGE_GLL>::shapes_need_reinit() const { return true; } +template <> bool FE<1,LAGRANGE_GLL>::shapes_need_reinit() const { return true; } +template <> bool FE<2,LAGRANGE_GLL>::shapes_need_reinit() const { return true; } +template <> bool FE<3,LAGRANGE_GLL>::shapes_need_reinit() const { return true; } + +#ifdef LIBMESH_ENABLE_AMR +template <> +void FE<2,LAGRANGE_GLL>::compute_constraints (DofConstraints & constraints, + DofMap & dof_map, + const unsigned int variable_number, + const Elem * elem) +{ compute_proj_constraints(constraints, dof_map, variable_number, elem); } + +template <> +void FE<3,LAGRANGE_GLL>::compute_constraints (DofConstraints & constraints, + DofMap & dof_map, + const unsigned int variable_number, + const Elem * elem) +{ compute_proj_constraints(constraints, dof_map, variable_number, elem); } +#endif // LIBMESH_ENABLE_AMR + + +} // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_0D.C b/src/fe/fe_lagrange_gll_shape_0D.C index 6a7cb0abe06..1fe3cd9967a 100644 --- a/src/fe/fe_lagrange_gll_shape_0D.C +++ b/src/fe/fe_lagrange_gll_shape_0D.C @@ -25,8 +25,8 @@ namespace libMesh { - LIBMESH_DEFAULT_VECTORIZED_FE(0,L2_LAGRANGE_GLL) +LIBMESH_DEFAULT_VECTORIZED_FE(0,LAGRANGE_GLL) template <> @@ -64,6 +64,41 @@ Real FE<0,L2_LAGRANGE_GLL>::shape(const FEType, } +template <> +Real FE<0,LAGRANGE_GLL>::shape(const ElemType, + const Order, + const unsigned int libmesh_dbg_var(i), + const Point &) +{ + libmesh_assert_less (i, 1); + return 1.; +} + + +template <> +Real FE<0,LAGRANGE_GLL>::shape(const Elem *, + const Order, + const unsigned int libmesh_dbg_var(i), + const Point &, + const bool) +{ + libmesh_assert_less (i, 1); + return 1.; +} + + +template <> +Real FE<0,LAGRANGE_GLL>::shape(const FEType, + const Elem *, + const unsigned int libmesh_dbg_var(i), + const Point &, + const bool) +{ + libmesh_assert_less (i, 1); + return 1.; +} + + template <> Real FE<0,L2_LAGRANGE_GLL>::shape_deriv(const ElemType, const Order, @@ -102,6 +137,44 @@ Real FE<0,L2_LAGRANGE_GLL>::shape_deriv(const FEType, } +template <> +Real FE<0,LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,LAGRANGE_GLL>::shape_deriv(const Elem *, + const Order, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,LAGRANGE_GLL>::shape_deriv(const FEType, + const Elem *, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES template <> @@ -142,6 +215,44 @@ Real FE<0,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType, } +template <> +Real FE<0,LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,LAGRANGE_GLL>::shape_second_deriv(const Elem *, + const Order, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + +template <> +Real FE<0,LAGRANGE_GLL>::shape_second_deriv(const FEType, + const Elem *, + const unsigned int, + const unsigned int, + const Point &, + const bool) +{ + libmesh_error_msg("No spatial derivatives in 0D!"); + return 0.; +} + + #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES } // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_1D.C b/src/fe/fe_lagrange_gll_shape_1D.C index 8f2b4baa3cf..1503d6d08cc 100644 --- a/src/fe/fe_lagrange_gll_shape_1D.C +++ b/src/fe/fe_lagrange_gll_shape_1D.C @@ -26,8 +26,8 @@ namespace libMesh { - LIBMESH_DEFAULT_VECTORIZED_FE(1,L2_LAGRANGE_GLL) +LIBMESH_DEFAULT_VECTORIZED_FE(1,LAGRANGE_GLL) template <> @@ -115,6 +115,91 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, } +template <> +Real FE<1,LAGRANGE_GLL>::shape(const ElemType, + const Order, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<1,LAGRANGE_GLL>::shape(const Elem * elem, + const Order order, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<1,LAGRANGE_GLL>::shape(const FEType fet, + const Elem * elem, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<1,LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<1,LAGRANGE_GLL>::shape_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 1); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +template <> +Real FE<1,LAGRANGE_GLL>::shape_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 1); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES template <> @@ -163,6 +248,51 @@ Real FE<1,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, } +template <> +Real FE<1,LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<1,LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<1>()); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); +} + + +template <> +Real FE<1,LAGRANGE_GLL>::shape_second_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<1>()); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); +} + + #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES } // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_2D.C b/src/fe/fe_lagrange_gll_shape_2D.C index b1803b36985..b929e3fb95c 100644 --- a/src/fe/fe_lagrange_gll_shape_2D.C +++ b/src/fe/fe_lagrange_gll_shape_2D.C @@ -26,8 +26,8 @@ namespace libMesh { - LIBMESH_DEFAULT_VECTORIZED_FE(2,L2_LAGRANGE_GLL) +LIBMESH_DEFAULT_VECTORIZED_FE(2,LAGRANGE_GLL) template <> @@ -115,6 +115,91 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, } +template <> +Real FE<2,LAGRANGE_GLL>::shape(const ElemType, + const Order, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<2,LAGRANGE_GLL>::shape(const Elem * elem, + const Order order, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<2,LAGRANGE_GLL>::shape(const FEType fet, + const Elem * elem, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<2,LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<2,LAGRANGE_GLL>::shape_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 2); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +template <> +Real FE<2,LAGRANGE_GLL>::shape_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 2); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES template <> @@ -163,6 +248,51 @@ Real FE<2,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, } +template <> +Real FE<2,LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<2,LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<2>()); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); +} + + +template <> +Real FE<2,LAGRANGE_GLL>::shape_second_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<2>()); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); +} + + #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES } // namespace libMesh diff --git a/src/fe/fe_lagrange_gll_shape_3D.C b/src/fe/fe_lagrange_gll_shape_3D.C index 31c95105c01..d6b641fda9e 100644 --- a/src/fe/fe_lagrange_gll_shape_3D.C +++ b/src/fe/fe_lagrange_gll_shape_3D.C @@ -26,8 +26,8 @@ namespace libMesh { - LIBMESH_DEFAULT_VECTORIZED_FE(3,L2_LAGRANGE_GLL) +LIBMESH_DEFAULT_VECTORIZED_FE(3,LAGRANGE_GLL) template <> @@ -115,6 +115,91 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_deriv(const FEType fet, } +template <> +Real FE<3,LAGRANGE_GLL>::shape(const ElemType, + const Order, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<3,LAGRANGE_GLL>::shape(const Elem * elem, + const Order order, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<3,LAGRANGE_GLL>::shape(const FEType fet, + const Elem * elem, + const unsigned int i, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, nullptr, 0); +} + + +template <> +Real FE<3,LAGRANGE_GLL>::shape_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<3,LAGRANGE_GLL>::shape_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 3); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + +template <> +Real FE<3,LAGRANGE_GLL>::shape_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, 3); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, &j, 1); +} + + #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES template <> @@ -163,6 +248,51 @@ Real FE<3,L2_LAGRANGE_GLL>::shape_second_deriv(const FEType fet, } +template <> +Real FE<3,LAGRANGE_GLL>::shape_second_deriv(const ElemType, + const Order, + const unsigned int, + const unsigned int, + const Point &) +{ + libmesh_error_msg("The LAGRANGE_GLL shape functions follow the orientation of the " + "entity owning each degree of freedom, so they need an Elem."); + return 0.; +} + + +template <> +Real FE<3,LAGRANGE_GLL>::shape_second_deriv(const Elem * elem, + const Order order, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<3>()); + + return fe_lagrange_gll_shape + (elem, order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); +} + + +template <> +Real FE<3,LAGRANGE_GLL>::shape_second_deriv(const FEType fet, + const Elem * elem, + const unsigned int i, + const unsigned int j, + const Point & p, + const bool add_p_level) +{ + libmesh_assert(elem); + libmesh_assert_less (j, fe_lagrange_gll_n_second_derivs<3>()); + + return fe_lagrange_gll_shape + (elem, fet.order + add_p_level*elem->p_level(), i, p, fe_lagrange_gll_second_deriv_pairs[j], 2); +} + + #endif // LIBMESH_ENABLE_SECOND_DERIVATIVES } // namespace libMesh diff --git a/src/fe/fe_transformation_base.C b/src/fe/fe_transformation_base.C index caeee5dbcfe..2ade6f106c0 100644 --- a/src/fe/fe_transformation_base.C +++ b/src/fe/fe_transformation_base.C @@ -52,6 +52,7 @@ std::unique_ptr> FETransformationBase(order.get_order()); return std::make_unique(dim, static_cast(2*p - 1 + extraorder)); diff --git a/src/libmesh_SOURCES b/src/libmesh_SOURCES index 95b89dc8942..b67cae35417 100644 --- a/src/libmesh_SOURCES +++ b/src/libmesh_SOURCES @@ -67,6 +67,7 @@ libmesh_SOURCES = \ src/fe/fe_l2_lagrange.C \ src/fe/fe_l2_lagrange_gll.C \ src/fe/fe_lagrange.C \ + src/fe/fe_lagrange_gll.C \ src/fe/fe_lagrange_gll_shape_0D.C \ src/fe/fe_lagrange_gll_shape_1D.C \ src/fe/fe_lagrange_gll_shape_2D.C \ diff --git a/src/utils/string_to_enum.C b/src/utils/string_to_enum.C index 1d8609bd966..6eb25055fdc 100644 --- a/src/utils/string_to_enum.C +++ b/src/utils/string_to_enum.C @@ -223,6 +223,7 @@ std::map fefamily_to_enum { {"LAGRANGE_VEC" , LAGRANGE_VEC}, {"L2_LAGRANGE" , L2_LAGRANGE}, {"L2_LAGRANGE_VEC" , L2_LAGRANGE_VEC}, + {"LAGRANGE_GLL" , LAGRANGE_GLL}, {"L2_LAGRANGE_GLL" , L2_LAGRANGE_GLL}, {"HIERARCHIC" , HIERARCHIC}, {"HIERARCHIC_VEC" , HIERARCHIC_VEC}, From ec9b75388133558abf32c86ee4c8debd1ae3c512 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 10:33:36 -0700 Subject: [PATCH 24/27] Test the LAGRANGE_GLL family The FETest harness covers the shape functions and their first two derivatives at orders one through four, and FEOrientationTest covers what a continuous basis needs beyond that: that the shape functions of a degree of freedom follow the orientation of the one entity owning it, and that two elements sharing a side arrive at the same shape function for a degree of freedom they share. Those are the properties the index map is built to satisfy, and they are held at orders three through five on QUAD9 and HEX27, over a skewed mesh and every permutation of an element, so each of the eight symmetries of a quadrilateral face is reached. The collocation test now runs over both Gauss-Lobatto families. They differ in the order they number their degrees of freedom rather than in where those sit, so the L2 family's matrix of shape function values is the identity while the C0 family's is a permutation of it. What both are held to is that each shape function is one at exactly one point and exactly zero at the rest and that no two claim the same point, which is what the diagonal mass matrix rests on. The mass matrix is still summed the way an assembly loop would sum it, so that the diagonal is a property of that arithmetic rather than one read back from the values just asserted. Co-Authored-By: Claude --- tests/fe/fe_gll_collocation_test.C | 171 +++++++++++++++++++---------- tests/fe/fe_lagrange_gll_test.C | 25 +++++ tests/fe/fe_orientation_test.C | 5 + tests/fe/fe_test.h | 1 + 4 files changed, 145 insertions(+), 57 deletions(-) create mode 100644 tests/fe/fe_lagrange_gll_test.C diff --git a/tests/fe/fe_gll_collocation_test.C b/tests/fe/fe_gll_collocation_test.C index 6e196cb900e..811b894d2f0 100644 --- a/tests/fe/fe_gll_collocation_test.C +++ b/tests/fe/fe_gll_collocation_test.C @@ -1,12 +1,18 @@ -// A nodal basis whose interpolation points are the points of a quadrature rule is -// collocated with it: each shape function is one at its own point and zero at every other, -// so the matrix of shape function values is the identity and the mass matrix the rule -// assembles is diagonal. The second holds for any mapping and any element shape, since the -// Jacobian only scales a diagonal entry. +// A nodal basis whose interpolation points are the points of a quadrature rule is collocated +// with it: each shape function is one at its own point and zero at every other, so the mass +// matrix that rule assembles is diagonal. That holds for any mapping and any element shape, +// since the Jacobian only scales a diagonal entry, and it holds for both Gauss-Lobatto nodal +// families, which differ in the order they number their degrees of freedom rather than in +// where those degrees of freedom sit. // -// The property is exact rather than approximate, so these tests compare against 1 and 0 -// with no tolerance. That is what the basis reading its points from QGaussLobatto buys: a -// basis that computed its own would agree only to roundoff. +// The L2 family numbers them in the order the rule lays out its points, so its matrix of shape +// function values is the identity. The C0 family numbers them by the entity that owns them, so +// the matrix is a permutation of the identity. What both hold to is that the map from a degree +// of freedom to its point is one to one, which is what the diagonal rests on. +// +// The property is exact rather than approximate, so the tests compare against 1 and 0 with no +// tolerance. That is what the basis reading its points from QGaussLobatto buys: a basis that +// computed its own would agree only to roundoff. #include #include @@ -29,7 +35,7 @@ using namespace libMesh; -template +template class FEGLLCollocationTest : public CppUnit::TestCase { protected: @@ -67,25 +73,59 @@ public: void tearDown() { _mesh.reset(); } - /// The rule the family pairs itself with, which is the one it is collocated with - std::unique_ptr collocated_rule(const FEType & fe_type, const unsigned int dim) + /** + * The point of the collocated rule that each degree of freedom interpolates at, taken from + * the shape function values and holding them to being one there and zero everywhere else. + * + * The L2 family numbers its degrees of freedom in the order the rule lays out its points, so + * this map is the identity for it. The C0 family numbers them by the entity that owns them, + * so the map is a permutation. Either way it is one to one, which is what makes the mass + * matrix diagonal. + */ + std::vector collocation_map(const std::vector> & phi) { - return fe_type.default_quadrature_rule(dim); + std::vector point_of_dof(phi.size(), invalid_uint); + std::vector taken(phi.size(), false); + + for (const auto i : index_range(phi)) + { + CPPUNIT_ASSERT_EQUAL(phi.size(), phi[i].size()); + + for (const auto q : index_range(phi[i])) + { + if (phi[i][q] == 1.) + { + CPPUNIT_ASSERT_EQUAL(invalid_uint, point_of_dof[i]); + point_of_dof[i] = cast_int(q); + } + else + // Exactly zero, not nearly: the basis and the rule carry the same points + CPPUNIT_ASSERT_EQUAL(Real(0), phi[i][q]); + } + + CPPUNIT_ASSERT(point_of_dof[i] != invalid_uint); + + // One degree of freedom per point, so that no point is claimed twice + CPPUNIT_ASSERT(!taken[point_of_dof[i]]); + taken[point_of_dof[i]] = true; + } + + return point_of_dof; } - void testShapesAreIdentity() + void testShapesAreCollocated() { LOG_UNIT_TEST; - const FEType fe_type(order, L2_LAGRANGE_GLL); + const FEType fe_type(order, family); const unsigned int dim = Elem::type_to_dim_map[elem_type]; std::unique_ptr fe = FEBase::build(dim, fe_type); - std::unique_ptr qrule = collocated_rule(fe_type, dim); + std::unique_ptr qrule = fe_type.default_quadrature_rule(dim); fe->attach_quadrature_rule(qrule.get()); - // The accessors have to be reached before reinit, which is what tells the element what - // to compute + // The accessors have to be reached before reinit, which is what tells the element what to + // compute const std::vector> & phi = fe->get_phi(); unsigned int n_elem = 0; @@ -94,12 +134,15 @@ public: { fe->reinit(elem); - // The default rule carries one point per degree of freedom + // The rule carries one point per degree of freedom CPPUNIT_ASSERT_EQUAL(phi.size(), std::size_t(qrule->n_points())); - for (const auto i : index_range(phi)) - for (const auto q : index_range(phi[i])) - CPPUNIT_ASSERT_EQUAL((i == q) ? Real(1) : Real(0), phi[i][q]); + const std::vector point_of_dof = collocation_map(phi); + + // The L2 family also agrees with the rule on the order of the points + if (family == L2_LAGRANGE_GLL) + for (const auto i : index_range(point_of_dof)) + CPPUNIT_ASSERT_EQUAL(cast_int(i), point_of_dof[i]); ++n_elem; } @@ -112,11 +155,11 @@ public: { LOG_UNIT_TEST; - const FEType fe_type(order, L2_LAGRANGE_GLL); + const FEType fe_type(order, family); const unsigned int dim = Elem::type_to_dim_map[elem_type]; std::unique_ptr fe = FEBase::build(dim, fe_type); - std::unique_ptr qrule = collocated_rule(fe_type, dim); + std::unique_ptr qrule = fe_type.default_quadrature_rule(dim); fe->attach_quadrature_rule(qrule.get()); const std::vector> & phi = fe->get_phi(); @@ -126,8 +169,12 @@ public: { fe->reinit(elem); + const std::vector point_of_dof = collocation_map(phi); const std::size_t n_dofs = phi.size(); + // Summed the way an assembly loop would sum it, so that the diagonal is a property of + // the arithmetic that assembles a mass matrix rather than one read back from the shape + // function values the assertions above already hold for (const auto i : make_range(n_dofs)) for (const auto j : make_range(n_dofs)) { @@ -137,11 +184,11 @@ public: if (i == j) { - // A diagonal entry is the weight of its own point times the Jacobian - // there, which is positive on a valid element, so the mass matrix is - // positive definite and its inverse costs a reciprocal per entry + // A diagonal entry is the weight of its own point times the Jacobian there, + // which is positive on a valid element, so the mass matrix is positive + // definite and its inverse costs a reciprocal per entry CPPUNIT_ASSERT(m > 0.); - LIBMESH_ASSERT_FP_EQUAL(JxW[i], m, TOLERANCE*TOLERANCE); + LIBMESH_ASSERT_FP_EQUAL(JxW[point_of_dof[i]], m, TOLERANCE*TOLERANCE); } else CPPUNIT_ASSERT_EQUAL(Real(0), m); @@ -150,39 +197,49 @@ public: } }; -#define INSTANTIATE_FEGLLCOLLOCATIONTEST(elemtype, order) \ - class FEGLLCollocationTest_##order##_##elemtype : \ - public FEGLLCollocationTest { \ - public: \ - FEGLLCollocationTest_##order##_##elemtype() : \ - FEGLLCollocationTest() { \ - if (unitlog->summarized_logs_enabled()) \ - this->libmesh_suite_name = "FEGLLCollocationTest"; \ - else \ - this->libmesh_suite_name = \ - "FEGLLCollocationTest_" #order "_" #elemtype; \ - } \ - CPPUNIT_TEST_SUITE( FEGLLCollocationTest_##order##_##elemtype ); \ - CPPUNIT_TEST( testShapesAreIdentity ); \ - CPPUNIT_TEST( testMassMatrixIsDiagonal ); \ - CPPUNIT_TEST_SUITE_END(); \ - }; \ - \ - CPPUNIT_TEST_SUITE_REGISTRATION( FEGLLCollocationTest_##order##_##elemtype ) - -INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE2, FIRST); -INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, THIRD); -INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, EIGHTH); +#define INSTANTIATE_FEGLLCOLLOCATIONTEST(elemtype, order, family) \ + class FEGLLCollocationTest_##family##_##order##_##elemtype : \ + public FEGLLCollocationTest { \ + public: \ + FEGLLCollocationTest_##family##_##order##_##elemtype() : \ + FEGLLCollocationTest() { \ + if (unitlog->summarized_logs_enabled()) \ + this->libmesh_suite_name = "FEGLLCollocationTest"; \ + else \ + this->libmesh_suite_name = \ + "FEGLLCollocationTest_" #family "_" #order "_" #elemtype; \ + } \ + CPPUNIT_TEST_SUITE( FEGLLCollocationTest_##family##_##order##_##elemtype ); \ + CPPUNIT_TEST( testShapesAreCollocated ); \ + CPPUNIT_TEST( testMassMatrixIsDiagonal ); \ + CPPUNIT_TEST_SUITE_END(); \ + }; \ + \ + CPPUNIT_TEST_SUITE_REGISTRATION( FEGLLCollocationTest_##family##_##order##_##elemtype ) + +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE2, FIRST, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, THIRD, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, EIGHTH, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE2, FIRST, LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, THIRD, LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(EDGE3, EIGHTH, LAGRANGE_GLL); #if LIBMESH_DIM > 1 -INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD4, FIRST); -INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, SECOND); -INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, FOURTH); -INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, EIGHTH); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD4, FIRST, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, SECOND, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, FOURTH, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, EIGHTH, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD4, FIRST, LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, SECOND, LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, FOURTH, LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(QUAD9, EIGHTH, LAGRANGE_GLL); #endif #if LIBMESH_DIM > 2 -INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX8, FIRST); -INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, SECOND); -INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, FOURTH); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX8, FIRST, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, SECOND, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, FOURTH, L2_LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX8, FIRST, LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, SECOND, LAGRANGE_GLL); +INSTANTIATE_FEGLLCOLLOCATIONTEST(HEX27, FOURTH, LAGRANGE_GLL); #endif diff --git a/tests/fe/fe_lagrange_gll_test.C b/tests/fe/fe_lagrange_gll_test.C new file mode 100644 index 00000000000..5ff6c48f170 --- /dev/null +++ b/tests/fe/fe_lagrange_gll_test.C @@ -0,0 +1,25 @@ +#include "fe_test.h" + +// The C0 Gauss-Lobatto basis needs a node for each entity that owns degrees of freedom, so +// order two and above wants mid-edge nodes in two dimensions and face nodes as well in three. + +INSTANTIATE_FETEST(FIRST, LAGRANGE_GLL, EDGE2); +INSTANTIATE_FETEST(SECOND, LAGRANGE_GLL, EDGE2); +INSTANTIATE_FETEST(SECOND, LAGRANGE_GLL, EDGE3); +INSTANTIATE_FETEST(THIRD, LAGRANGE_GLL, EDGE3); +INSTANTIATE_FETEST(FOURTH, LAGRANGE_GLL, EDGE3); + +#if LIBMESH_DIM > 1 +INSTANTIATE_FETEST(FIRST, LAGRANGE_GLL, QUAD4); +INSTANTIATE_FETEST(SECOND, LAGRANGE_GLL, QUAD8); +INSTANTIATE_FETEST(SECOND, LAGRANGE_GLL, QUAD9); +INSTANTIATE_FETEST(THIRD, LAGRANGE_GLL, QUAD9); +INSTANTIATE_FETEST(FOURTH, LAGRANGE_GLL, QUAD9); +#endif + +#if LIBMESH_DIM > 2 +INSTANTIATE_FETEST(FIRST, LAGRANGE_GLL, HEX8); +INSTANTIATE_FETEST(SECOND, LAGRANGE_GLL, HEX27); +INSTANTIATE_FETEST(THIRD, LAGRANGE_GLL, HEX27); +INSTANTIATE_FETEST(FOURTH, LAGRANGE_GLL, HEX27); +#endif diff --git a/tests/fe/fe_orientation_test.C b/tests/fe/fe_orientation_test.C index a29cccb1d78..1aa71d3d21b 100644 --- a/tests/fe/fe_orientation_test.C +++ b/tests/fe/fe_orientation_test.C @@ -354,10 +354,15 @@ private: INSTANTIATE_FEORIENTATIONTEST(TRI6, THIRD, HIERARCHIC); INSTANTIATE_FEORIENTATIONTEST(QUAD9, THIRD, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(QUAD9, THIRD, LAGRANGE_GLL); +INSTANTIATE_FEORIENTATIONTEST(QUAD9, FOURTH, LAGRANGE_GLL); INSTANTIATE_FEORIENTATIONTEST(TET14, THIRD, HIERARCHIC); INSTANTIATE_FEORIENTATIONTEST(TET14, FOURTH, HIERARCHIC); INSTANTIATE_FEORIENTATIONTEST(HEX27, THIRD, HIERARCHIC); INSTANTIATE_FEORIENTATIONTEST(HEX27, FOURTH, HIERARCHIC); +INSTANTIATE_FEORIENTATIONTEST(HEX27, THIRD, LAGRANGE_GLL); +INSTANTIATE_FEORIENTATIONTEST(HEX27, FOURTH, LAGRANGE_GLL); +INSTANTIATE_FEORIENTATIONTEST(HEX27, FIFTH, LAGRANGE_GLL); INSTANTIATE_FEORIENTATIONTEST(PRISM21, THIRD, HIERARCHIC); INSTANTIATE_FEORIENTATIONTEST(PRISM21, FOURTH, HIERARCHIC); INSTANTIATE_FECONFORMITYTEST(HEX27, THIRD, SIDE_HIERARCHIC); diff --git a/tests/fe/fe_test.h b/tests/fe/fe_test.h index b98040086e6..6f153854777 100644 --- a/tests/fe/fe_test.h +++ b/tests/fe/fe_test.h @@ -757,6 +757,7 @@ class FETest : public FETestBase { case LAGRANGE: case L2_LAGRANGE: + case LAGRANGE_GLL: case L2_LAGRANGE_GLL: case BERNSTEIN: case RATIONAL_BERNSTEIN: From ebd188ca2f402519489cc6ff33d927bdfd4e28f8 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 10:33:47 -0700 Subject: [PATCH 25/27] Test that a hanging node leaves a basis holding its own polynomials A conforming basis on an adaptively refined mesh needs the degrees of freedom on a hanging node constrained to the coarse side they lie on. Nothing here exercised that machinery for any family, and it is invisible on a conforming mesh, so a family could carry the wrong answer for extra_hanging_dofs and every existing test would still pass. This holds the constrained space to containing the polynomials of its own order, which it must, since a polynomial that smooth is continuous across the interface and so already conforms. Projecting one onto the space therefore reproduces it, and a wrong constraint shows up as a solution that no longer does, because enforcing it moves the hanging degrees of freedom off the values that interpolate the polynomial. LAGRANGE is the control: its constraints are long settled, so a failure there would be this test's fault rather than a family's. HIERARCHIC covers the other family allocating a separate degree of freedom at a hanging node, and LAGRANGE_GLL is what the test was written for. Setting that family's extra_hanging_dofs back to false fails exactly its three cases and leaves the other four passing, so the test does discriminate. Co-Authored-By: Claude --- tests/Makefile.am | 2 + tests/Makefile.in | 246 ++++++++++++++++++++++++++++-- tests/fe/fe_amr_constraint_test.C | 168 ++++++++++++++++++++ 3 files changed, 404 insertions(+), 12 deletions(-) create mode 100644 tests/fe/fe_amr_constraint_test.C diff --git a/tests/Makefile.am b/tests/Makefile.am index e7398511fe2..192b277ff2f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -36,8 +36,10 @@ unit_tests_sources = \ fe/fe_l2_hierarchic_test.C \ fe/fe_l2_lagrange_test.C \ fe/fe_l2_lagrange_gll_test.C \ + fe/fe_lagrange_gll_test.C \ fe/fe_gll_collocation_test.C \ fe/fe_gll_lagrange_agreement_test.C \ + fe/fe_amr_constraint_test.C \ fe/fe_lagrange_test.C \ fe/fe_monomial_test.C \ fe/fe_rational_map.C \ diff --git a/tests/Makefile.in b/tests/Makefile.in index d396cd9ae96..4bb49c1bb92 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -218,8 +218,10 @@ am__unit_tests_dbg_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ - fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_lagrange_gll_test.C \ + fe/fe_gll_collocation_test.C \ + fe/fe_gll_lagrange_agreement_test.C \ + fe/fe_amr_constraint_test.C fe/fe_lagrange_test.C \ fe/fe_monomial_test.C fe/fe_rational_map.C \ fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ fe/fe_test.h fe/fe_xyz_test.C \ @@ -308,8 +310,10 @@ am__objects_2 = unit_tests_dbg-driver.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_dbg-fe_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.$(OBJEXT) \ + fe/unit_tests_dbg-fe_amr_constraint_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_dbg-fe_rational_map.$(OBJEXT) \ @@ -441,8 +445,10 @@ am__unit_tests_devel_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ - fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_lagrange_gll_test.C \ + fe/fe_gll_collocation_test.C \ + fe/fe_gll_lagrange_agreement_test.C \ + fe/fe_amr_constraint_test.C fe/fe_lagrange_test.C \ fe/fe_monomial_test.C fe/fe_rational_map.C \ fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ fe/fe_test.h fe/fe_xyz_test.C \ @@ -530,8 +536,10 @@ am__objects_4 = unit_tests_devel-driver.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_devel-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_devel-fe_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_devel-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_devel-fe_gll_lagrange_agreement_test.$(OBJEXT) \ + fe/unit_tests_devel-fe_amr_constraint_test.$(OBJEXT) \ fe/unit_tests_devel-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_devel-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_devel-fe_rational_map.$(OBJEXT) \ @@ -681,8 +689,10 @@ am__unit_tests_oprof_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ - fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_lagrange_gll_test.C \ + fe/fe_gll_collocation_test.C \ + fe/fe_gll_lagrange_agreement_test.C \ + fe/fe_amr_constraint_test.C fe/fe_lagrange_test.C \ fe/fe_monomial_test.C fe/fe_rational_map.C \ fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ fe/fe_test.h fe/fe_xyz_test.C \ @@ -770,8 +780,10 @@ am__objects_6 = unit_tests_oprof-driver.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_oprof-fe_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.$(OBJEXT) \ + fe/unit_tests_oprof-fe_amr_constraint_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_oprof-fe_rational_map.$(OBJEXT) \ @@ -899,8 +911,10 @@ am__unit_tests_opt_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ - fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_lagrange_gll_test.C \ + fe/fe_gll_collocation_test.C \ + fe/fe_gll_lagrange_agreement_test.C \ + fe/fe_amr_constraint_test.C fe/fe_lagrange_test.C \ fe/fe_monomial_test.C fe/fe_rational_map.C \ fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ fe/fe_test.h fe/fe_xyz_test.C \ @@ -988,8 +1002,10 @@ am__objects_8 = unit_tests_opt-driver.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_opt-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_opt-fe_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_opt-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_opt-fe_gll_lagrange_agreement_test.$(OBJEXT) \ + fe/unit_tests_opt-fe_amr_constraint_test.$(OBJEXT) \ fe/unit_tests_opt-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_opt-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_opt-fe_rational_map.$(OBJEXT) \ @@ -1117,8 +1133,10 @@ am__unit_tests_prof_SOURCES_DIST = driver.C libmesh_cppunit.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ - fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_lagrange_gll_test.C \ + fe/fe_gll_collocation_test.C \ + fe/fe_gll_lagrange_agreement_test.C \ + fe/fe_amr_constraint_test.C fe/fe_lagrange_test.C \ fe/fe_monomial_test.C fe/fe_rational_map.C \ fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ fe/fe_test.h fe/fe_xyz_test.C \ @@ -1206,8 +1224,10 @@ am__objects_10 = unit_tests_prof-driver.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_hierarchic_test.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_lagrange_test.$(OBJEXT) \ fe/unit_tests_prof-fe_l2_lagrange_gll_test.$(OBJEXT) \ + fe/unit_tests_prof-fe_lagrange_gll_test.$(OBJEXT) \ fe/unit_tests_prof-fe_gll_collocation_test.$(OBJEXT) \ fe/unit_tests_prof-fe_gll_lagrange_agreement_test.$(OBJEXT) \ + fe/unit_tests_prof-fe_amr_constraint_test.$(OBJEXT) \ fe/unit_tests_prof-fe_lagrange_test.$(OBJEXT) \ fe/unit_tests_prof-fe_monomial_test.$(OBJEXT) \ fe/unit_tests_prof-fe_rational_map.$(OBJEXT) \ @@ -1380,6 +1400,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ base/$(DEPDIR)/unit_tests_prof-overlapping_coupling_test.Po \ base/$(DEPDIR)/unit_tests_prof-point_neighbor_coupling_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po \ + fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po \ @@ -1390,6 +1411,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po \ + fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po \ @@ -1400,6 +1422,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_dbg-fe_xyz_test.Po \ fe/$(DEPDIR)/unit_tests_dbg-inf_fe_radial_test.Po \ fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po \ + fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po \ @@ -1410,6 +1433,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po \ + fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po \ @@ -1420,6 +1444,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_devel-fe_xyz_test.Po \ fe/$(DEPDIR)/unit_tests_devel-inf_fe_radial_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po \ + fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po \ @@ -1430,6 +1455,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po \ + fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po \ @@ -1440,6 +1466,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_oprof-fe_xyz_test.Po \ fe/$(DEPDIR)/unit_tests_oprof-inf_fe_radial_test.Po \ fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po \ + fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po \ @@ -1450,6 +1477,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po \ + fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po \ @@ -1460,6 +1488,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_opt-fe_xyz_test.Po \ fe/$(DEPDIR)/unit_tests_opt-inf_fe_radial_test.Po \ fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po \ + fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po \ @@ -1470,6 +1499,7 @@ am__depfiles_remade = ./$(DEPDIR)/unit_tests_dbg-driver.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po \ + fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po \ fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po \ @@ -2499,8 +2529,10 @@ unit_tests_sources = driver.C libmesh_cppunit.h stream_redirector.h \ fe/fe_hermite_test.C fe/fe_hierarchic_test.C \ fe/fe_orientation_test.C fe/inf_fe_radial_test.C \ fe/fe_l2_hierarchic_test.C fe/fe_l2_lagrange_test.C \ - fe/fe_l2_lagrange_gll_test.C fe/fe_gll_collocation_test.C \ - fe/fe_gll_lagrange_agreement_test.C fe/fe_lagrange_test.C \ + fe/fe_l2_lagrange_gll_test.C fe/fe_lagrange_gll_test.C \ + fe/fe_gll_collocation_test.C \ + fe/fe_gll_lagrange_agreement_test.C \ + fe/fe_amr_constraint_test.C fe/fe_lagrange_test.C \ fe/fe_monomial_test.C fe/fe_rational_map.C \ fe/fe_rational_test.C fe/fe_side_test.C fe/fe_szabab_test.C \ fe/fe_test.h fe/fe_xyz_test.C \ @@ -2864,10 +2896,14 @@ fe/unit_tests_dbg-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_dbg-fe_lagrange_gll_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_dbg-fe_amr_constraint_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_dbg-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3194,10 +3230,14 @@ fe/unit_tests_devel-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_devel-fe_lagrange_gll_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_gll_lagrange_agreement_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_devel-fe_amr_constraint_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_devel-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3504,10 +3544,14 @@ fe/unit_tests_oprof-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_oprof-fe_lagrange_gll_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_oprof-fe_amr_constraint_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_oprof-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -3774,10 +3818,14 @@ fe/unit_tests_opt-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_opt-fe_lagrange_gll_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_gll_lagrange_agreement_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_opt-fe_amr_constraint_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_opt-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -4044,10 +4092,14 @@ fe/unit_tests_prof-fe_l2_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_l2_lagrange_gll_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_prof-fe_lagrange_gll_test.$(OBJEXT): fe/$(am__dirstamp) \ + fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_gll_collocation_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_gll_lagrange_agreement_test.$(OBJEXT): \ fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) +fe/unit_tests_prof-fe_amr_constraint_test.$(OBJEXT): \ + fe/$(am__dirstamp) fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_lagrange_test.$(OBJEXT): fe/$(am__dirstamp) \ fe/$(DEPDIR)/$(am__dirstamp) fe/unit_tests_prof-fe_monomial_test.$(OBJEXT): fe/$(am__dirstamp) \ @@ -4340,6 +4392,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/unit_tests_prof-overlapping_coupling_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/unit_tests_prof-point_neighbor_coupling_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @@ -4350,6 +4403,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po@am__quote@ # am--include-marker @@ -4360,6 +4414,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-fe_xyz_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_dbg-inf_fe_radial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @@ -4370,6 +4425,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po@am__quote@ # am--include-marker @@ -4380,6 +4436,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-fe_xyz_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_devel-inf_fe_radial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @@ -4390,6 +4447,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po@am__quote@ # am--include-marker @@ -4400,6 +4458,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-fe_xyz_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_oprof-inf_fe_radial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @@ -4410,6 +4469,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po@am__quote@ # am--include-marker @@ -4420,6 +4480,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-fe_xyz_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_opt-inf_fe_radial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po@am__quote@ # am--include-marker @@ -4430,6 +4491,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po@am__quote@ # am--include-marker @@ -5232,6 +5294,20 @@ fe/unit_tests_dbg-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +fe/unit_tests_dbg-fe_lagrange_gll_test.o: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_dbg-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_dbg-fe_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C + +fe/unit_tests_dbg-fe_lagrange_gll_test.obj: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_dbg-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_dbg-fe_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` + fe/unit_tests_dbg-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_dbg-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po @@ -5260,6 +5336,20 @@ fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreeme @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +fe/unit_tests_dbg-fe_amr_constraint_test.o: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_amr_constraint_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_dbg-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_dbg-fe_amr_constraint_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C + +fe/unit_tests_dbg-fe_amr_constraint_test.obj: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_amr_constraint_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_dbg-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_dbg-fe_amr_constraint_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_dbg-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` + fe/unit_tests_dbg-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_dbg_CPPFLAGS) $(CPPFLAGS) $(unit_tests_dbg_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_dbg-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Tpo -c -o fe/unit_tests_dbg-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po @@ -7052,6 +7142,20 @@ fe/unit_tests_devel-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +fe/unit_tests_devel-fe_lagrange_gll_test.o: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_devel-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_devel-fe_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C + +fe/unit_tests_devel-fe_lagrange_gll_test.obj: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_devel-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_devel-fe_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` + fe/unit_tests_devel-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_devel-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po @@ -7080,6 +7184,20 @@ fe/unit_tests_devel-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agree @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +fe/unit_tests_devel-fe_amr_constraint_test.o: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_amr_constraint_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_devel-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_devel-fe_amr_constraint_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C + +fe/unit_tests_devel-fe_amr_constraint_test.obj: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_amr_constraint_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_devel-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_devel-fe_amr_constraint_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_devel-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` + fe/unit_tests_devel-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_devel_CPPFLAGS) $(CPPFLAGS) $(unit_tests_devel_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_devel-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Tpo -c -o fe/unit_tests_devel-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po @@ -8872,6 +8990,20 @@ fe/unit_tests_oprof-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +fe/unit_tests_oprof-fe_lagrange_gll_test.o: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_oprof-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_oprof-fe_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C + +fe/unit_tests_oprof-fe_lagrange_gll_test.obj: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_oprof-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_oprof-fe_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` + fe/unit_tests_oprof-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_oprof-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po @@ -8900,6 +9032,20 @@ fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agree @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +fe/unit_tests_oprof-fe_amr_constraint_test.o: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_amr_constraint_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_oprof-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_oprof-fe_amr_constraint_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C + +fe/unit_tests_oprof-fe_amr_constraint_test.obj: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_amr_constraint_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_oprof-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_oprof-fe_amr_constraint_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_oprof-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` + fe/unit_tests_oprof-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_oprof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_oprof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_oprof-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Tpo -c -o fe/unit_tests_oprof-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po @@ -10692,6 +10838,20 @@ fe/unit_tests_opt-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +fe/unit_tests_opt-fe_lagrange_gll_test.o: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_opt-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_opt-fe_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C + +fe/unit_tests_opt-fe_lagrange_gll_test.obj: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_opt-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_opt-fe_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` + fe/unit_tests_opt-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_opt-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po @@ -10720,6 +10880,20 @@ fe/unit_tests_opt-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreeme @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +fe/unit_tests_opt-fe_amr_constraint_test.o: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_amr_constraint_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_opt-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_opt-fe_amr_constraint_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C + +fe/unit_tests_opt-fe_amr_constraint_test.obj: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_amr_constraint_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_opt-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_opt-fe_amr_constraint_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_opt-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` + fe/unit_tests_opt-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_opt_CPPFLAGS) $(CPPFLAGS) $(unit_tests_opt_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_opt-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Tpo -c -o fe/unit_tests_opt-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po @@ -12512,6 +12686,20 @@ fe/unit_tests_prof-fe_l2_lagrange_gll_test.obj: fe/fe_l2_lagrange_gll_test.C @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_l2_lagrange_gll_test.obj `if test -f 'fe/fe_l2_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_l2_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_l2_lagrange_gll_test.C'; fi` +fe/unit_tests_prof-fe_lagrange_gll_test.o: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_lagrange_gll_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_prof-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_prof-fe_lagrange_gll_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_lagrange_gll_test.o `test -f 'fe/fe_lagrange_gll_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_gll_test.C + +fe/unit_tests_prof-fe_lagrange_gll_test.obj: fe/fe_lagrange_gll_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_lagrange_gll_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Tpo -c -o fe/unit_tests_prof-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_lagrange_gll_test.C' object='fe/unit_tests_prof-fe_lagrange_gll_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_lagrange_gll_test.obj `if test -f 'fe/fe_lagrange_gll_test.C'; then $(CYGPATH_W) 'fe/fe_lagrange_gll_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_lagrange_gll_test.C'; fi` + fe/unit_tests_prof-fe_gll_collocation_test.o: fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_gll_collocation_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Tpo -c -o fe/unit_tests_prof-fe_gll_collocation_test.o `test -f 'fe/fe_gll_collocation_test.C' || echo '$(srcdir)/'`fe/fe_gll_collocation_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po @@ -12540,6 +12728,20 @@ fe/unit_tests_prof-fe_gll_lagrange_agreement_test.obj: fe/fe_gll_lagrange_agreem @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_gll_lagrange_agreement_test.obj `if test -f 'fe/fe_gll_lagrange_agreement_test.C'; then $(CYGPATH_W) 'fe/fe_gll_lagrange_agreement_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_gll_lagrange_agreement_test.C'; fi` +fe/unit_tests_prof-fe_amr_constraint_test.o: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_amr_constraint_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_prof-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_prof-fe_amr_constraint_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_amr_constraint_test.o `test -f 'fe/fe_amr_constraint_test.C' || echo '$(srcdir)/'`fe/fe_amr_constraint_test.C + +fe/unit_tests_prof-fe_amr_constraint_test.obj: fe/fe_amr_constraint_test.C +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_amr_constraint_test.obj -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Tpo -c -o fe/unit_tests_prof-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='fe/fe_amr_constraint_test.C' object='fe/unit_tests_prof-fe_amr_constraint_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -c -o fe/unit_tests_prof-fe_amr_constraint_test.obj `if test -f 'fe/fe_amr_constraint_test.C'; then $(CYGPATH_W) 'fe/fe_amr_constraint_test.C'; else $(CYGPATH_W) '$(srcdir)/fe/fe_amr_constraint_test.C'; fi` + fe/unit_tests_prof-fe_lagrange_test.o: fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit_tests_prof_CPPFLAGS) $(CPPFLAGS) $(unit_tests_prof_CXXFLAGS) $(CXXFLAGS) -MT fe/unit_tests_prof-fe_lagrange_test.o -MD -MP -MF fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Tpo -c -o fe/unit_tests_prof-fe_lagrange_test.o `test -f 'fe/fe_lagrange_test.C' || echo '$(srcdir)/'`fe/fe_lagrange_test.C @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Tpo fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po @@ -14484,6 +14686,7 @@ distclean: distclean-am -rm -f base/$(DEPDIR)/unit_tests_prof-overlapping_coupling_test.Po -rm -f base/$(DEPDIR)/unit_tests_prof-point_neighbor_coupling_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po @@ -14494,6 +14697,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po @@ -14504,6 +14708,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po @@ -14514,6 +14719,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po @@ -14524,6 +14730,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po @@ -14534,6 +14741,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po @@ -14544,6 +14752,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po @@ -14554,6 +14763,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po @@ -14564,6 +14774,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po @@ -14574,6 +14785,7 @@ distclean: distclean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po @@ -15181,6 +15393,7 @@ maintainer-clean: maintainer-clean-am -rm -f base/$(DEPDIR)/unit_tests_prof-overlapping_coupling_test.Po -rm -f base/$(DEPDIR)/unit_tests_prof-point_neighbor_coupling_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_gll_collocation_test.Po @@ -15191,6 +15404,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_orientation_test.Po @@ -15201,6 +15415,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_dbg-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_dbg-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_gll_collocation_test.Po @@ -15211,6 +15426,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_orientation_test.Po @@ -15221,6 +15437,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_devel-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_devel-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_gll_collocation_test.Po @@ -15231,6 +15448,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_orientation_test.Po @@ -15241,6 +15459,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_oprof-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_oprof-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_gll_collocation_test.Po @@ -15251,6 +15470,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_orientation_test.Po @@ -15261,6 +15481,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_opt-fe_xyz_test.Po -rm -f fe/$(DEPDIR)/unit_tests_opt-inf_fe_radial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-dual_shape_verification_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_amr_constraint_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_bernstein_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_clough_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_gll_collocation_test.Po @@ -15271,6 +15492,7 @@ maintainer-clean: maintainer-clean-am -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_hierarchic_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_l2_lagrange_test.Po + -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_gll_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_lagrange_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_monomial_test.Po -rm -f fe/$(DEPDIR)/unit_tests_prof-fe_orientation_test.Po diff --git a/tests/fe/fe_amr_constraint_test.C b/tests/fe/fe_amr_constraint_test.C new file mode 100644 index 00000000000..b4428ac720c --- /dev/null +++ b/tests/fe/fe_amr_constraint_test.C @@ -0,0 +1,168 @@ +// A conforming basis on an adaptively refined mesh needs the degrees of freedom on a hanging +// node constrained to the coarse side it lies on. Whether that machinery is right is not +// visible on a conforming mesh, and nothing else here exercises it, so this holds it to the +// property it exists to preserve: the constrained space still contains the polynomials of its +// own order, so projecting one reproduces it exactly, on both sides of the interface. +// +// A wrong constraint shows up as a solution that no longer equals the polynomial it was +// projected from, since enforcing the constraint moves the hanging degrees of freedom away +// from the values that interpolate it. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_comm.h" +#include "libmesh_cppunit.h" + +#include +#include +#include + +using namespace libMesh; + +namespace { + +/** + * A polynomial of total degree \p D, which the tensor product space of order \p D holds, so a + * family of that order can reproduce it and a projection onto it should. + */ +template +Number amr_test_poly(const Point & p, + const Parameters &, + const std::string &, + const std::string &) +{ + const Real s = 1. + p(0) + 2.*p(1) + 3.*p(2); + + Real value = 1.; + for (unsigned int d = 0; d != D; ++d) + value *= s; + + return value; +} + +} + +#ifdef LIBMESH_ENABLE_AMR + +template +class FEAMRConstraintTest : public CppUnit::TestCase +{ +protected: + std::unique_ptr _mesh; + std::string libmesh_suite_name; + +public: + void setUp() + { + _mesh = std::make_unique(*TestCommWorld); + + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + + // A second order type, which the families needing mid-edge and face nodes ask for + ElemType base = elem_type; + if (elem_type == QUAD9) base = QUAD4; + if (elem_type == HEX27) base = HEX8; + if (elem_type == EDGE3) base = EDGE2; + + if (dim == 1) + MeshTools::Generation::build_line(*_mesh, 4, 0., 1., base); + else if (dim == 2) + MeshTools::Generation::build_square(*_mesh, 2, 2, 0., 1., 0., 1., base); + else + MeshTools::Generation::build_cube(*_mesh, 2, 2, 2, 0., 1., 0., 1., 0., 1., base); + + if (base != elem_type) + _mesh->all_second_order(); + + // Refine part of the mesh, which is what puts a hanging node on the interface between the + // refined elements and their unrefined neighbours + MeshRefinement refine(*_mesh); + + for (auto * elem : _mesh->active_element_ptr_range()) + if (elem->id() % 4 == 0) + elem->set_refinement_flag(Elem::REFINE); + + refine.refine_and_coarsen_elements(); + } + + void tearDown() { _mesh.reset(); } + + void testConstrainedSpaceHoldsPolynomials() + { + LOG_UNIT_TEST; + + EquationSystems es(*_mesh); + System & sys = es.add_system("amr"); + sys.add_variable("u", FEType(order, family)); + es.init(); + + sys.project_solution(amr_test_poly(order)>, + nullptr, es.parameters); + + // The constraints the projection just enforced must leave the polynomial intact, at points + // spread through the mesh so that some fall in the refined part and some outside it + Parameters dummy; + unsigned int n_checked = 0; + + for (int a = 1; a < 8; ++a) + for (int b = 1; b < 8; ++b) + { + const unsigned int dim = Elem::type_to_dim_map[elem_type]; + const Point q(a/8., (dim > 1) ? b/8. : 0., (dim > 2) ? (a + b)/16. : 0.); + + const Number expected = + amr_test_poly(order)>(q, dummy, "", ""); + const Number actual = sys.point_value(0, q); + + LIBMESH_ASSERT_NUMBERS_EQUAL(expected, actual, TOLERANCE*std::sqrt(TOLERANCE)); + ++n_checked; + } + + CPPUNIT_ASSERT(n_checked > 0); + } +}; + +#define INSTANTIATE_FEAMRCONSTRAINTTEST(elemtype, order, family) \ + class FEAMRConstraintTest_##family##_##order##_##elemtype : \ + public FEAMRConstraintTest { \ + public: \ + FEAMRConstraintTest_##family##_##order##_##elemtype() : \ + FEAMRConstraintTest() { \ + if (unitlog->summarized_logs_enabled()) \ + this->libmesh_suite_name = "FEAMRConstraintTest"; \ + else \ + this->libmesh_suite_name = \ + "FEAMRConstraintTest_" #family "_" #order "_" #elemtype; \ + } \ + CPPUNIT_TEST_SUITE( FEAMRConstraintTest_##family##_##order##_##elemtype ); \ + CPPUNIT_TEST( testConstrainedSpaceHoldsPolynomials ); \ + CPPUNIT_TEST_SUITE_END(); \ + }; \ + \ + CPPUNIT_TEST_SUITE_REGISTRATION( FEAMRConstraintTest_##family##_##order##_##elemtype ) + +// The Gauss-Lobatto basis this exists for, with LAGRANGE and HIERARCHIC beside it. LAGRANGE is +// the control: its constraints are long settled, so a failure there would be the test's fault +// rather than the family's. HIERARCHIC is the other family that allocates a separate degree of +// freedom at a hanging node, which is the path this was written to cover. +INSTANTIATE_FEAMRCONSTRAINTTEST(QUAD9, SECOND, LAGRANGE); +INSTANTIATE_FEAMRCONSTRAINTTEST(QUAD9, THIRD, LAGRANGE_GLL); +INSTANTIATE_FEAMRCONSTRAINTTEST(QUAD9, FOURTH, LAGRANGE_GLL); +INSTANTIATE_FEAMRCONSTRAINTTEST(QUAD9, THIRD, HIERARCHIC); + +#if LIBMESH_DIM > 2 +INSTANTIATE_FEAMRCONSTRAINTTEST(HEX27, SECOND, LAGRANGE); +INSTANTIATE_FEAMRCONSTRAINTTEST(HEX27, THIRD, LAGRANGE_GLL); +INSTANTIATE_FEAMRCONSTRAINTTEST(HEX27, THIRD, HIERARCHIC); +#endif + +#endif // LIBMESH_ENABLE_AMR From 06cc211607a56738ec7011b53228dc4ac10eb759 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Tue, 15 Sep 2026 13:05:15 -0700 Subject: [PATCH 26/27] Install the headers of the Gauss-Lobatto nodal basis include/include_HEADERS names the headers that are installed, and the two the Gauss-Lobatto basis adds were missing from it, so a consumer building against an installed libMesh could not reach them however well the library itself had compiled. The build tree carries its own header farm, which is why nothing inside libMesh noticed. The script that generates that list did not scan include/gpu, so the five Kokkos headers there had been added to the generated file by hand and running the script would have dropped them. It scans gpu now and those five are generated along with the rest, which leaves the list reproducible: the next person to add a header regenerates it without silently uninstalling someone else's. Co-Authored-By: Claude --- include/Makefile.in | 12 +++++++----- include/include_HEADERS | 12 +++++++----- include/rebuild_include_HEADERS.sh | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/include/Makefile.in b/include/Makefile.in index 00edd929c89..88ed2960190 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -712,6 +712,8 @@ include_HEADERS = \ fe/fe_compute_data.h \ fe/fe_interface.h \ fe/fe_interface_macros.h \ + fe/fe_lagrange_gll_shape.h \ + fe/fe_lagrange_gll_shape_1D.h \ fe/fe_lagrange_shape_1D.h \ fe/fe_macro.h \ fe/fe_map.h \ @@ -800,11 +802,6 @@ include_HEADERS = \ geom/sphere.h \ geom/stored_range.h \ geom/surface.h \ - gpu/kokkos_linalg_base.h \ - gpu/kokkos_storage.h \ - gpu/kokkos_storage_policy.h \ - gpu/kokkos_tensor_ops.h \ - gpu/kokkos_vector_ops.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ ghosting/ghosting_functor.h \ @@ -812,6 +809,11 @@ include_HEADERS = \ ghosting/overlap_coupling.h \ ghosting/point_neighbor_coupling.h \ ghosting/sibling_coupling.h \ + gpu/kokkos_linalg_base.h \ + gpu/kokkos_storage.h \ + gpu/kokkos_storage_policy.h \ + gpu/kokkos_tensor_ops.h \ + gpu/kokkos_vector_ops.h \ mesh/abaqus_io.h \ mesh/boundary_info.h \ mesh/boundary_mesh.h \ diff --git a/include/include_HEADERS b/include/include_HEADERS index a7ddd59ad09..a253162025c 100644 --- a/include/include_HEADERS +++ b/include/include_HEADERS @@ -87,6 +87,8 @@ include_HEADERS = \ fe/fe_compute_data.h \ fe/fe_interface.h \ fe/fe_interface_macros.h \ + fe/fe_lagrange_gll_shape.h \ + fe/fe_lagrange_gll_shape_1D.h \ fe/fe_lagrange_shape_1D.h \ fe/fe_macro.h \ fe/fe_map.h \ @@ -175,11 +177,6 @@ include_HEADERS = \ geom/sphere.h \ geom/stored_range.h \ geom/surface.h \ - gpu/kokkos_linalg_base.h \ - gpu/kokkos_storage.h \ - gpu/kokkos_storage_policy.h \ - gpu/kokkos_tensor_ops.h \ - gpu/kokkos_vector_ops.h \ ghosting/default_coupling.h \ ghosting/ghost_point_neighbors.h \ ghosting/ghosting_functor.h \ @@ -187,6 +184,11 @@ include_HEADERS = \ ghosting/overlap_coupling.h \ ghosting/point_neighbor_coupling.h \ ghosting/sibling_coupling.h \ + gpu/kokkos_linalg_base.h \ + gpu/kokkos_storage.h \ + gpu/kokkos_storage_policy.h \ + gpu/kokkos_tensor_ops.h \ + gpu/kokkos_vector_ops.h \ mesh/abaqus_io.h \ mesh/boundary_info.h \ mesh/boundary_mesh.h \ diff --git a/include/rebuild_include_HEADERS.sh b/include/rebuild_include_HEADERS.sh index 8fcdfd7b1b0..988970ae48e 100755 --- a/include/rebuild_include_HEADERS.sh +++ b/include/rebuild_include_HEADERS.sh @@ -30,7 +30,7 @@ echo "" echo "" } >> include_HEADERS -headers=$(find base enums error_estimation fe geom ghosting mesh numerics parallel partitioning timpi_shims physics quadrature reduced_basis solution_transfer solvers systems utils -name "*.h" -o -name "*specializations" -type f | LC_COLLATE=POSIX sort) +headers=$(find base enums error_estimation fe geom ghosting gpu mesh numerics parallel partitioning timpi_shims physics quadrature reduced_basis solution_transfer solvers systems utils -name "*.h" -o -name "*specializations" -type f | LC_COLLATE=POSIX sort) headers="libmesh_config.h $headers" { From 61ef686c1336501b34f7a2b647931470a4603e73 Mon Sep 17 00:00:00 2001 From: Alex Lindsay Date: Sat, 19 Sep 2026 16:42:22 -0600 Subject: [PATCH 27/27] Skip the spatial global indexing when temporarily partitioning a replicated mesh Partitioner::partition() assigns a temporary partitioning to any unpartitioned elements before handing the mesh to the real partitioner, so that every element carries a valid processor id. partition_unpartitioned_elements() built that assignment from a spatial global indexing, which costs a parallel sort over the range. On a replicated mesh every processor traverses the elements in the same order, so an element's position in the range is already a globally consistent index into [0, n_unpartitioned_elements), and the sort only buys a different, equally arbitrary linear split of the same range. Use the position directly there and keep the spatial indexing for distributed meshes, where traversal order differs between processors. This matters most for a freshly generated mesh, where no element is partitioned yet and the temporary assignment therefore covers the whole mesh before being overwritten. On a 262144 element mesh partitioned onto 24 processors, partition_unpartitioned_elements() falls from 0.706 s to 0.018 s and the enclosing partition() from 1.86 s to 1.14 s. For context, METIS itself accounts for 0.13 s of that. Co-Authored-By: Claude --- src/partitioning/partitioner.C | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/partitioning/partitioner.C b/src/partitioning/partitioner.C index b05db2d87f8..7271268a90a 100644 --- a/src/partitioning/partitioner.C +++ b/src/partitioning/partitioner.C @@ -394,16 +394,22 @@ void Partitioner::partition_unpartitioned_elements (MeshBase & mesh, // Calling this on all processors a unique range in [0,n_unpartitioned_elements) is constructed. // Only the indices for the elements we pass in are returned in the array. - MeshCommunication().find_global_indices (mesh.comm(), - MeshTools::create_bounding_box(mesh), it, end, - global_indices); + // A replicated mesh traverses its elements in the same order on every processor, so an + // element's position in this range is already a globally consistent index into + // [0, n_unpartitioned_elements). A spatial global indexing would give an equally arbitrary + // linear split of the same range at the cost of a parallel sort, which dominates the + // partitioning of a freshly generated mesh, where no element is partitioned yet. + if (!mesh.is_replicated()) + MeshCommunication().find_global_indices (mesh.comm(), + MeshTools::create_bounding_box(mesh), it, end, + global_indices); dof_id_type cnt=0; for (auto & elem : as_range(it, end)) { - libmesh_assert_less (cnt, global_indices.size()); + libmesh_assert (mesh.is_replicated() || cnt < global_indices.size()); const dof_id_type global_index = - global_indices[cnt++]; + mesh.is_replicated() ? cnt++ : global_indices[cnt++]; libmesh_assert_less (global_index, subdomain_bounds.back()); libmesh_assert_less (global_index, n_unpartitioned_elements);