You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I got 14 seconds for Gyy, 190 seconds for Gyx. For Gyx, it the mixed mesh algorithm is used, which uses an octree for collision detection. This is probably what makes it slower. Would need to profile to see if there is type instability or allocations that can be avoided here...
I think I stumbled across the cause, it comes down to the argument order. I measure
@time Gyy =assemble(BEAST.Identity(), Y, Y) # 11 s@time Gyx =assemble(BEAST.Identity(), X, Y) # 151 s@time Gxy =assemble(BEAST.Identity(), Y, X) # 19 s
So it comes down to argument order: in assemble!(biop::LocalOperator,...), it is checked whether the test geometry is a refinement of the trial geometry, but not the other way around - so the Gxy case takes the refines path, while the Gyx case takes the slower mixed path.
This could be solved by also checking the other way around and adding a function assemble_local_trialrefines! that mirrors assemble_local_refines!.
If you want, I can write it up and create a pull request if it works as I expect.
For unrelated meshes, this would of course not help, but here for the actual refinement on the sphere, it should solve the problem.
Activity
krcools commentedon Aug 18, 2026
I got 14 seconds for Gyy, 190 seconds for Gyx. For Gyx, it the mixed mesh algorithm is used, which uses an octree for collision detection. This is probably what makes it slower. Would need to profile to see if there is type instability or allocations that can be avoided here...
paresula commentedon Oct 6, 2026
I think I stumbled across the cause, it comes down to the argument order. I measure
So it comes down to argument order: in
assemble!(biop::LocalOperator,...), it is checked whether the test geometry is a refinement of the trial geometry, but not the other way around - so the Gxy case takes the refines path, while the Gyx case takes the slower mixed path.This could be solved by also checking the other way around and adding a function
assemble_local_trialrefines!that mirrorsassemble_local_refines!.If you want, I can write it up and create a pull request if it works as I expect.
For unrelated meshes, this would of course not help, but here for the actual refinement on the sphere, it should solve the problem.