It is fairly common in many fields for users to work with data that is computed using periodic boundary conditions, and these users often encounter trouble (see examples below). I think that ParaView could make this work simpler by defining a new Tile Dataset filter, that creates shallow copies of the grid according to the user-defined periodic boundaries. Basically, the user selects one or more among the x, y, z coordinate axes, and the dataset would be duplicated to the right, left, etc.
I believe that this can be done now using several Transform filters, together with Append Datasets and Clip, but this is tedious to set up. I’d love to hear others’ thoughts on this.
A periodic boundary condition means that (for instance) the xmin and xmax values must be the same. The idea is that you’re looking at a small piece of a quasi-infinite domain. In practical terms, you copy the data from one side of the simulation to the opposing side. Reflect --almost-- works, but the data in the interior of the simulation may not be symmetric.
If you want to construct this using existing filters, you can do it with a bunch of Transform filters that only translate the data. In the image I’ve attached, that’s what I did. I think it’s possible to do this more efficiently (since every operation on the data only really needs to be run on the original dataset with ghost cells). Moreover, it’s tedious to set up, and you get weird visual effects at the boundaries (2nd image)
This is indeed a feature that I would love to use as well, because all my simulations feature periodic BC in at least one direction.
I have also been going the route “create a bunch of transforms”+“Group Datasets”+“Clip Filter” which works, … but is tedious to set up. Especially in situations where you have multiple data sources (eg. fluid + other objects in the flow).
A “periodic transform” filter, or a “tile filter”, as proposed by @woodscn would help, but I would like to suggest another approach:
A “View Transform” that is configured outside of and independently from the filter pipeline.
Here, one would
define the coordinates of the periodic boundaries
(which would also define a box to which all representations in the scene are clipped),
define the box in which the scene is to be shown
(further clipping the scene if smaller than the periodic box in (1), or having the scene tiled periodically if bigger than the periodic box in (1))
define an offset vector by which all representations are to be shifted in space inside the box defined in (2)
When incrementing the offset vector in (3) with time, this view transform would also enable the view to swim with the flow (like a Galilei transformation) which requires a great deal of python scripting right now.