[Users] Plotting all refinement levels using Kuibit
Gabriele Bozzola
bozzola.gabriele at gmail.com
Wed Oct 9 13:05:02 CDT 2024
Hi José and Bruno,
I am not entirely sure why you see what you are seeing. Maybe a first step
might be to look at the HDF5 directly and see what the data looks like
there.
Dumb question, but, I assume that your box is centered around (0, 0, 0)? If
not, that might be a reason for the misalignment.
Another reason I can think of is the prolongation points. I don't remember
how they are handled in the output.
Best,
Gabriele
On Wed, Oct 9, 2024 at 3:25 AM José Ferreira <jpmferreira at ua.pt> wrote:
> Dear Gabriele,
>
>
> Thanks for the reply, this is very close to what I want to achieve!
>
> The code and the corresponding image that I obtain using your suggestion
> are
>
> sd = SimDir("<output>")
> ts = sd.timeseries
> gf = sd.gf
>
> phi1 = gf.z["phi1"]
> phi1_0 = phi1.get_time(0)
>
> fig = plt.figure()
> ax1 = fig.add_subplot(111)
> for ref_level, component, grid_data in phi1_0:
> ax1.plot(grid_data.coordinates_meshgrid()[0], grid_data.data, marker=".", label="Re")
>
> ax1.grid(alpha=0.5)
> ax1.set_xlabel("z")
> ax1.set_ylabel(r"$\phi$")
> ax1.legend();
>
> Because all of the points on the y-axis are overlapping, which I imagine
> they always will because we I’m working with box-in-a-box, I’m sure that I
> merge the coordinate grids on the x-axis and the values on the y-axis into
> two distinct arrays.
>
>
> However, I do have a few issues:
>
> 1.
>
> The physical boundaries of the grid as provided in the parfile (in
> this case are zmin=0 to zmax=64) are cropped for all refinement levels, and
> none of them hit z=0 nor z=64. What could be the cause of this? In my
> parfile CarpetIOHDF5 is configured to save ghost and boundary points,
> but not symmetry points;
> 2.
>
> The intersections between the different refinement levels do not
> match. In my parfile, the refinement levels are 48, 24, 12, 6, 3, 1.5 and
> 0.75, which does not add up with the intersection on the plot above. For
> instance, the second refinement level (in orange) spans all the way to z=57
> even though I expected it to go as far as z=48. I expected it to hit
> exactly z=48 because, according to the documentation
>
> When initializing an HierarchicalGridData, kuibit will make an effort to
> put all the different patches back together. If the provided components
> cover an entire grid, kuibit will merge them. In doing this, all the ghost
> zone information is discarded
>
>
> As for Bruno’s suggestion, I will look into the script in more detail, and
> correct me if I’m wrong, but I think the main idea seems to be more or less
> the same, where there’s an explicit call to iter_from_finest() to
> generate the iterator.
>
>
> Thank you to both of you,
>
> Best,
>
> José
>
>
>
> On 09/10/24 11:00, Bruno Giacomazzo wrote:
>
> Steve Brandt produced the attached script to plot raw data without
> interpolation using Kuibit. The script is for 2D data, but I assume the
> same can be done with 1D data.
>
> Cheers,
> Bruno
>
>
> Il giorno mar 8 ott 2024 alle ore 19:53 Gabriele Bozzola <
> bozzola.gabriele at gmail.com> ha scritto:
>
>> Hi José,
>>
>> Dealing with plotting a hierarchical grid in full generality
>> (with/without ghost zones, handling multiple possibly overlapping
>> components, ...) is a hard problem.
>> This is especially the case for 2/3D grids, which are commonly plotted
>> with heatmaps/colormaps. To go around this, we resample the grids to a
>> uniform grid
>> for plotting purposes. In kuibit, these are "UniformGridData". These can
>> be plotted directly.
>>
>> In the 1D case, we can just resample everything onto the finest grid, and
>> that's why you see more points. By default, the resampling method is just
>> nearest
>> neighbor, so this method is not making data up, just adding more
>> "intermediate" points where there are fewer.
>>
>> Indeed, as you say, HierarchicalGridData objects have all the information
>> to plot one level at the time and it is probably feasible to use them for
>> simple 1D plots.
>>
>> `HierarchicalGridData` can be iterated over: when you iterate over with
>> something like:
>>
>> for ref_level, component, grid_data in hier_grid:
>> Here you plot the grid_data
>>
>> (I haven't tested this)
>>
>> kuibit also has a method `to_GridSeries()`. This is a specialized method
>> for 1D variables. Currently, this is only implemented for UniformGridData,
>> so you'd have
>> to merge the refinement levels to use it. We could extend it to
>> HierarchicalGridData and instead of resampling to the finest grid, we'd
>> just collect all the points.
>> In this way, you could just call this method and call `plt.plot` to have
>> a line plot (as you do with timeseries in kuibit). This should be
>> straightforward (it's essentially
>> what I sketched above) and I can guide you to the implementation if
>> that's something you'd be interested in contributing.
>>
>> Please, let me know if this helps,
>> Gabriele
>>
>> On Tue, Oct 8, 2024 at 10:05 AM José Ferreira <jpmferreira at ua.pt> wrote:
>>
>>> Dear toolkit community,
>>>
>>>
>>> I’m struggling to find a way to plot a 1D quantity in Kuibit without
>>> merging the different meshes originated from the mesh refinement.
>>>
>>> As a workaround, I have made a Python script that reads the file of a
>>> grid function and plots every point along the axis and its corresponding
>>> value. I can share this script if somebody is interested, but it is not
>>> very good as it breaks once you use checkpoints and has hardcoded paths.
>>>
>>> However, it gets the job done, as you can see in an example plot below,
>>> where it is hopefully obvious that there is an increase in the number of
>>> points as z approaches 0.
>>>
>>> Obviously, a solution that uses Kuibit would be much better. However, I
>>> cannot come up with such a solution and so I’m writing this e-mail.
>>>
>>>
>>> From the documentation, the object that represents the simulation data
>>> (including the mesh refinement levels), is the HierarchicalGridData,
>>> and I know how to go from a grid function to this object.
>>>
>>> For instance, to get the HierarchicalGridData that represents the real
>>> part of a scalar field along the x-axis at t=0, we do
>>>
>>> sd = SimDir("<output>")
>>> gf = sd.gf
>>> phi1=gf.x["phi1"].get_time(0)
>>>
>>> All I have to do now is plot this somehow. As it turns out, this is
>>> impossible, because according to the documentation
>>>
>>> We cannot plot directly this object, because it is a complicated object.
>>> To plot it, we have to merge the refinement levels to a single
>>> UniformGridData. We can do this with refinement_levels_merged().
>>>
>>> But, all of the information regarding the mesh refinement levels is
>>> here, so it should be possible to extract this information and plot it,
>>> right?
>>>
>>> Looking at the methods and variables in HierarchicalGridData I came up
>>> with nothing.
>>>
>>> Does anybody have a solution to this?
>>>
>>>
>>> Thank you in advance,
>>>
>>> Best Regards,
>>>
>>> José Ferreira
>>>
>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at einsteintoolkit.org
>>> http://lists.einsteintoolkit.org/mailman/listinfo/users
>>>
>> _______________________________________________
>> Users mailing list
>> Users at einsteintoolkit.org
>> http://lists.einsteintoolkit.org/mailman/listinfo/users
>>
>
>
> --
>
> Prof. Bruno Giacomazzo
> Department of Physics
> University of Milano-Bicocca
> Piazza della Scienza 3
> 20126 Milano
> Italy
>
> email: bruno.giacomazzo at unimib.it
> phone: (+39) 02 6448 2321
> web: http://www.brunogiacomazzo.org
>
> ---------------------------------------------------------------------
> There are only 10 types of people in the world:
> Those who understand binary, and those who don't
> ----------------------------------------------------------------------
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.einsteintoolkit.org/pipermail/users/attachments/20241009/ddf69393/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Figure 2.png
Type: image/png
Size: 47293 bytes
Desc: not available
URL: <http://lists.einsteintoolkit.org/pipermail/users/attachments/20241009/ddf69393/attachment-0001.png>
More information about the Users
mailing list