Implementation of IProductWRTBaseMatFree
A complete design of IProductWRTBaseMatFree
, should work with all types of elements. This merge-request is based on the previous merge-request !22 (merged).
Add new methods GetVectorizedGeomFactorSize()
SetVectorizedJacobian()
to Operator.hpp
, which returns the std::vector<vec_t>
.
They will be called only once when calling the Create()
and the Jacobian data will be cached in the m_jac
for later use. Basis data is still fetched on the fly, same as !22 (merged).
Here is a simple benchmark:
- Platform: KCL CREATE HPC, Intel(R) Xeon(R) Gold 6142 CPU @ 2.60GHz, serial run.
- Configuration: Build=Release AVX2=ON MPI=OFF.
- Test case:
32^3
hex in a cubic domain, regular shape, np = nm + 1 (default), - Use
LibUtilities::Timer
to record the time used byapply()
, Seemain.cpp
BwdTransStdMat BwdTransMatfree IproductWRTBaseStdMat IproductWRTBaseMatFree
nm = 3 0.0364164 s 0.0543076 s 0.0655327 s 0.0913291 s
nm = 4 0.175829 s 0.119707 s 0.312965 s 0.225187 s
nm = 5 0.577169 s 0.238487 s 0.726944 s 0.477724 s
nm = 6 1.54373 s 0.425927 s 1.7487 s 0.888869 s
nm = 7 3.64499 s 0.70719 s 3.9742 s 1.50973 s
Edited by BOYANG XIA