Matrix-Free PhysInterp1DScaled
Issue/feature addressed
Performance of the PhysInterp1DScaled operator
Proposed solution
Introduced the matrix-free implementation for the PhysInterp1DScaled operator
Implementation
- 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.
- Removed the StdMat implementation of the PhysInterp1DScaled operator as it is a copy of BwdTrans
- Introduced the PhysInterp1DScaled operator within MatrixFreeOps library
- Added unit tests inside the CollectionsUnitTests for PhysInterp1DScaled NoCollections, MatrixFree and relaxed tolerances for pyramid implementation from 1e-8 to 2e-8.
- I introduced different variables names inside the operator1D, operator2D, operator3D routines and the kernels themselves. However, the nm0, nm1, nm2 which correspond to nq_in0, nq_in1, nq_in2 and nq0, nq1, nq2 which correspond to nq_out0, nq_out1, nq_out2 are kept as they are only before SwitchNodesPoints.h to follow the same naming convention.
Tests
Suggested reviewers
Notes
Please add any other information that could be useful for reviewers.
Checklist
-
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