How to plot or save derived quantity?

Hi,
I want to plot or save not only dependent variables (i.e. objects of the Function class) but also quantities, which are derived from Function objects. I attach the following example (derived from the standard Possion demo in 1D), where I am able to write uh (which is a Function object) but not vh = 2*uh, which is an object from the class ufl.algebra.product.
Thank you.

import numpy as np
import pyvista
import ufl
from dolfinx import fem, io, mesh
from ufl import ds, dx, grad, inner
from mpi4py import MPI
from petsc4py.PETSc import ScalarType

x_left = 0
x_right = 1
NumberOfCells = 1000
msh = mesh.create_interval(MPI.COMM_WORLD, NumberOfCells, points=(x_left, x_right))
V = fem.FunctionSpace(msh, ("Lagrange", 1))
facet_left_bdry = mesh.locate_entities_boundary(msh, dim=0, marker=lambda x: np.isclose(x[0], x_left))
dof_left_bdry = fem.locate_dofs_topological(V=V, entity_dim=0, entities=facet_left_bdry)
facet_right_bdry = mesh.locate_entities_boundary(msh, dim=0, marker=lambda x: np.isclose(x[0], x_right))
dof_right_bdry = fem.locate_dofs_topological(V=V, entity_dim=0, entities=facet_right_bdry)
bc_left = fem.dirichletbc(value=ScalarType(0), dofs=dof_left_bdry, V=V)

bc_right = fem.dirichletbc(value=ScalarType(1/6), dofs=dof_right_bdry, V=V)

u = ufl.TrialFunction(V)
v = ufl.TestFunction(V)
x = ufl.SpatialCoordinate(msh)
f = x[0]
a = inner(grad(u), grad(v)) * dx
L = -inner(f, v) * dx
problem = fem.petsc.LinearProblem(a, L, bcs=[bc_left, bc_right], petsc_options={"ksp_type": "preonly", "pc_type": "lu"})
uh = problem.solve()
vh = 2*uh
with io.XDMFFile(msh.comm, "out_poisson/poisson.xdmf", "w") as file:
file.write_mesh(msh)
file.write_function(uh)
file.write_function(vh)

See for instance; Implementation — FEniCSx tutorial where you use dolfinx.fem.Expression to interpolate the derived quantity into a suitable function space.