-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tree mesh acceleration #94
Conversation
Big things left to do: Serialization Still need to fix up InnerProduct matrices Pxxx
Updated the Face and Edge interpolation matrices to accept vectors
All tree tests now pass on local machine
Very excited about this. I ll try to hook my previous inversion scripts and let you know how it goes. |
… map added in C++11
the conda that is activated in appveyors VM is "clean" no need to set up a new test environment. only testing on tree currently (to hopefully speed up tests)
At this point it is quite a trivial solution, as it just serializes a numpy array of cell indices and levels, and upon deserialization completely rebuilds the TreeMesh.
…the TreeMesh class that were inherited.
…ing pickle tests for now, as I cannot reproduce the error on any local machine (where pickling worked).
Creates both cellBoundaryInd and faceBoundaryInd arrays by looping over all of the cells and checking if it's neighbor in that direction is NULL
@jcapriot: this is looking solid! Let me know when you feel it is ready to go :) |
This function will only work for CC, F, and E data, (which is what was supported before). It works by creating a temporary QuadTree mesh through the slice, and then uses the QuadTree mesh's plotImage function.
…ments of both type, and contiguous-ness
This should give a better error message instead of just silently continuing without a helpful message.
The OcTree mesh triangulation results in too many degenerate simplices, thus making the search slow. For now just switch back to an implementation that mimics the previous version (should still be much faster)
All of the averaging matrices that are in the TensorMesh are now implemented for the TreeMesh Also adding in the tests to ensure they are implemented correctly
I can take a look through the merge conflicts on this tonight |
# Conflicts: # .gitignore # .travis.yml # appveyor.yml # discretize/Tests.py # discretize/TreeMesh.py
Codecov Report
@@ Coverage Diff @@
## master #94 +/- ##
=========================================
Coverage ? 76.29%
=========================================
Files ? 17
Lines ? 4151
Branches ? 0
=========================================
Hits ? 3167
Misses ? 984
Partials ? 0
Continue to review full report at Codecov.
|
@jcapriot I am getting issues with the _aveCC2F Stencil. |
…might not have been imported properly. This seems to be the most common issue for unknown errors.
… will still test everything else. Also re-enabling python 3.5 tests
Only uploading whl files and not eggs
The point is to call this in cython, instead of having to loop over the cells in a tree in python.
At this point consider this branch as EXPERIMENTAL. There are many possible unsafe operations that could arise, so be careful (which will need to be enforced at a later time). The code is certainly not completely up to format standards, but at this point, just wanted to get a pull request going and allow anyone who wants to use it to test it out to find any bugs.
There are many changes to the TreeMesh implementation within this pull request, However it is mostly feature complete compared to the previous implementation with regards to the public members of the class.
It was mostly rewritten in a way that made the construction of the mesh and construction of the operators all done in c++/cython, which resulted in dramatic speedups. As a reference, the 97 nosetests on the tree in the previous implementation took 238.476s on my personal computer. This implementation took 20.281s.
The basic idea is that each object, (
node
,edge
, etc.) is aware of the structure of theTreeMesh
as each is a cpp class that contains references to other objects.A few key differences:
All tree construction is balanced (no need to call
tree.balance
, or passbalance=True
to functions)tree.refine
should only be called once (at this point) as it "finalizes" the tree. It might be good to add a flag to the tree initialization that would allow incremental additions (similar toscipy.spatial.ConvexHull
) and then require a finalization operation to be done before any other operations.Interpolation is "lazy" 2nd order now for all
E
,CC
, andF
interpolation, meaning we triangulate the grid points to interpolate. Interpolating without triangulation on the TreeMesh is still a point of research. This is not as fast as it could be, but still faster than previously.Both
face
andedge
operations are defined for 2D, (basically a re-ording of x-edges -> y-faces)Do not expect any ordering for the faces, edges, and nodes. They are whatever they have decided to be.
Do not expect any of the private members of the class to have remained consistent between implementations.
There are many other changes which should hopefully be apparent as you look through the code.
Big things that still need to be implemented
Serialization, (do not expect to pickle this object and have it work, however with construction being much faster, this shouldn't slow down anyone too much while it is being worked on).
PlotImage
andPlotSlice
.There are also many areas that this code could be extended to handle different types of underlying meshs, as well as support for differing sizes of axes, but as I said before, the initial goal of this pull request is to mimic the behavior of the current implementation.
Other than that, I hope this speeds up the operations for those who need them.
Update
TreeMesh
is pickle-able)TensorMesh
refine
andinsert_cells
function now have afinalize
keyword arg that can be set to false if you want to do multiple steps of tree building