-
-
Notifications
You must be signed in to change notification settings - Fork 202
Support list of DG-0 + other space in VTXWriter #3375
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
base: main
Are you sure you want to change the base?
Conversation
Currently DG-0 support in VTX is limited by: ornladios/ADIOS2#4179 |
Thank you for the information, a bit of a bummer. This PR could still be useful for steady data. |
We're directing efforts towards VTKHDF5 - it is actively developed/maintained. |
What is the recommended way to output both CG1 and DG0 time dependent data? |
I would interpolate the CG1 and DG0 data into a compatible function space (DG1). As Paraview 6.0 was just released (https://www.paraview.org/download/) it might be worthwhile getting this PR merged (as VTKHDF currently has very limited visualization capabilities of time dependent data in Paraview). |
I've been using this branch without issues with Paraview 5.13. I can confirm it also works with 6.0 @jorgensd . I am using this example: from dolfinx import fem, mesh, io
from mpi4py import MPI
import numpy as np
cells_per_side = 4
domain = mesh.create_unit_square(MPI.COMM_WORLD,
cells_per_side,
cells_per_side,
)
cg1 = fem.functionspace(domain, ("Lagrange", 1),)
dg0 = fem.functionspace(domain, ("Discontinuous Lagrange", 0),)
u_cg1 = fem.Function(cg1, name="u_cg1")
u_dg0 = fem.Function(dg0, name="u_dg0")
expression = lambda x : x[0]*x[1]
u_cg1.interpolate(expression)
u_dg0.interpolate(expression)
writer = io.VTXWriter(domain.comm,
"result_folder/post.bp",
output=[u_cg1,u_dg0])
for i in range(10):
time = np.float64(i)
u_cg1.x.array[:] *= (time + 1.0)
u_dg0.x.array[:] *= (time + 1.0)
writer.write(time)
writer.close()
`` |
bool has_V0_changed = false; | ||
for (auto& v : u) | ||
{ | ||
std::visit( | ||
[&V0, &has_V0_changed](auto& u) | ||
{ | ||
auto V = u->function_space().get(); | ||
assert(V); | ||
if (!impl::is_cellwise(*V->element())) | ||
{ | ||
V0 = V; | ||
has_V0_changed = true; | ||
} | ||
}, | ||
v); | ||
if (has_V0_changed) | ||
break; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ordinary-slim could you elaborate on this logic?
Here you look through all input functions, and replace the first function space with any (the last) function space if it is not a "constant" space. Is this so that you can mix the non-constant and constant spaces?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This V0 is used to check that all functions have the same dofmap. In the vtk scheme, we can provide both point data and cell data. Since the DG0 functions have this separate path, we only have to verify that the remaining non-DG0 functions use the same dofmap.
Continuation of #3107 so that we're able to output both DG0 + another space in the same bp file. The previous PR by @jorgensd says:
Since VTX is the recommended writer, I think it's necessary to support this feature. This code doesn't modify previous behavior regarding the written post files.
MWE