Hi Joachim,
Thank you.
To make the code a bit faster, I can only think of these two more changes:
(1) changed the element-wise boundary integration to skeleton-based edgewise integration. This gives me a little bit speed up (I was expecting more since we looping over edges now...anyway this is fine)
(2) use the compile flag to evaluate symbolicBFIs more efficiently. (This cause some trouble!!! It did give me speed-up when running in multi-threading without mpi, but it also slowed down the code when running in mpi in comparison with the code without the compile flag)
Now, I have two questions
concerning (1), is there a more efficient way to loop over edges of a subdomain? Currently, I can only do
Code:
element_boundary=True, definedon=mesh.Materials(...)
I guess I need to flag all edges of the subdomain properly, then use a definedon flag, something like
Code:
VOL, skeleton=True, definedon=???
But I don't know how to do it correctly.... if this is too complicated, I might just stick with element_boundary formulation since the speed-up using skeleton-based formulation is quite insignificant.
concerning (2), I am a bit confused about when to use the compile flag for speeding up. I've read the note
ngsolve.org/user-meeting2017/talks/hochsteger.pdf
But is still quite confused.
In my multi-threading test, I found .Compile(True, True) works better than .Compile(), which didn't give me any speed up... what's their difference, should I always stick with .Compile(True,True)? or (False, True)? (False, False)??
Then, the more serious question is that why the MPI version slowed down the code using compile flag? Should I just stick with the form without compile instead?
Best,
Guosheng