Open kjnam opened 5 years ago
Since HoloViews generally simply wraps external datastructures the first thing we would have to work out is what those are, so could provide a bit of background on the kinds of datastructures you use to represent hybrid meshes?
Hi, Philipp, Thank you for the quick response first. I would say that we have our own data structure. Currently my Python data structure for the mesh is simply numpy arrays for nodes (points), cells (simplices or connectivities), and associated values, so we can convert it into something that HoloViews understands or can wraps. If you prefer a specific file format of the mesh, we use 2dm and gr3 (originated from a ELCIRC data format, I guess.) From your answer, I guess that there could be a way to wrap hybrid mesh data nicely to visualize? Sorry that I just started investigating HoloViews and GeoViews, and I might have missed basic how-to's of Holoviews. I could not find a place to ask other than GitHub.
I could not find a place to ask other than GitHub.
This is the right place for this discussion. I think I'm following what you're saying about the datastructure but let me just clarify what the simplex/connectivity array looks like. If you have variable length simplexes then what does the datastructure look like for a tri-cell, my basic assumption is that it is a 4 column array where the 4th column is empty (e.g. denoted by a nan). Is that correct?
Yes, I used a 4-column array with nan for triangles for simplices.
Great, so the datastructure is pretty similar to what we already use to represent TriMeshes. I see no particular reason it couldn't be changed to support hybrid meshes. Since I'm not too familiar could you tell me if there is any applications that use arbitrary length meshes?
The model that we use is SCHISM, http://ccrm.vims.edu/schismweb/, but it is a pretty common practice to use mixed elements in finite element and finite volume models, e.g. DELFT3D, UnTRIM, and SUNTANS in ocean science, to name a few. Other models like COMSOL for engineering can use various element types in one mesh.
I'm using the 2dm format for my triangular unstructured meshes which I feed into TriMesh. In the future, I may also need mixed element types so this is of some interest to me as well.
We've been having discussions on attempting to unify data formats for meshes. It seems ADCIRC and much of the larger community have adopted UGRID as a general standard. As far as python object storage goes, we are looking at gridded (https://github.com/NOAA-ORR-ERD/gridded) and xmsgrid (https://github.com/Aquaveo/xmsgrid) as potential options.
It might be worth some thought on the accepted data structure wrt to the community. @kjnam is yours a custom data structure, or it is common to your region of science?
@kcpevey Mine is a custom data structure so far, but if there is a good Python implementation that meets our requirement, I will happily use those. I will look into the two repositories that you mentioned to find out if those work for me. On the side note, we are aware of UGRID, but I am not sure there is a Python implementation of UGRID.
@kcpevey I looked through 'gridded,' and I think it could work for a data structure with I/O for the UGRID format. Thank you for pointing to the package. @philippjfr In UGRID, it uses fill values (_FillValue) with the masked array, for the unused last edge indices. See http://ugrid-conventions.github.io/ugrid-conventions/#2d-flexible-mesh-mixed-triangles-quadrilaterals-etc-topology for UGRID convention, please.
@philippjfr I wonder if you had a chance to look at this? I took a look at the relevant parts of the codes, and it does not look simple to me to accommodate tri and quad together in the current codes...
Right, I'm quite sure we'd need a new representation. The main problem is still finding a good in-memory representation that does not require some complex dependency.
Thanks for the comment. The change in the memory representation of a mesh would be a major one that would affect other parts of the codes, I am afraid. Keep me posted, please.
Just to be clear, we have no plans to work on this atm. I'd happy to help out if you can come up with a proposal but without that I don't foresee there being much progress being made in the near future.
Understood. Thanks.
Hi, I deal with hybrid meshes, which are mixture of triangular and quadrilateral cells (or simplices) for ocean-scale simulations. I would like to try pyviz tools (holoviews/geoviews/earthsim) for pre- and post-processing my data, but I think that Holoviews supports either triangle- or quad-only meshes. Is that right? If not, is there a way to manage a hybrid mesh in the pyviz ecosystem? (I guess I can split quads into triangles, but it is not an ideal solution, obviously.) By the way, thank you for your awesome work for pyviz. They look great.