Skip to content

Matrix-Free PhysInterp1DScaled

Issue/feature addressed

Performance of the PhysInterp1DScaled operator

Proposed solution

Introduced the matrix-free implementation for the PhysInterp1DScaled operator


  1. Tidying up the MatrixFreeOps library by introducing:
    1.1 MATRIXFREE_EXPORT virtual void SetUpBdata([[maybe_unused]] std::vector< LibUtilities::BasisSharedPtr> &basis){};
    1.2 MATRIXFREE_EXPORT virtual void SetUpDBdata([[maybe_unused]] std::vector< LibUtilities::BasisSharedPtr> &basis){};
    1.3 MATRIXFREE_EXPORT virtual void SetUpInterp1D([[maybe_unused]] std::vector< LibUtilities::BasisSharedPtr> &basis, [[maybe_unused]] NekDouble factor){};
    1.4 MATRIXFREE_EXPORT virtual void SetUpZW([[maybe_unused]] std::vector< LibUtilities::BasisSharedPtr> &basis){};
    1.5 MATRIXFREE_EXPORT virtual void SetUpD([[maybe_unused]] std::vector< LibUtilities::BasisSharedPtr> &basis){}; \

to encapsulate the generation of the differentiation matrices, the interpolation matrices etc. These are now called upon construction of the operator struct that is responsible for doing the calculations for each operator.

  1. Removed the StdMat implementation of the PhysInterp1DScaled operator as it is a copy of BwdTrans
  2. Introduced the PhysInterp1DScaled operator within MatrixFreeOps library
  3. Added unit tests inside the CollectionsUnitTests for PhysInterp1DScaled NoCollections, MatrixFree and relaxed tolerances for pyramid implementation from 1e-8 to 2e-8.


Suggested reviewers

@ssherw @dmoxey @CFD-Xing


Please add any other information that could be useful for reviewers.


  • Functions and classes, or changes to them, are documented.
  • User guide/documentation is updated.
  • Changelog is updated.
  • Suitable tests added for new functionality.
  • Contributed code is correctly formatted. (See the contributing guidelines).
  • License added to any new files.
  • No extraneous files have been added (e.g. compiler output or test data files).
Edited by Alexandra Liosi

Merge request reports