Integration over a mesh

Hi everyone! I need to write a code for solving p-Poisson equation:
\begin{cases} \int_{\Omega} |\nabla u|^{p-2} \langle \nabla u, \nabla v \rangle d\Omega = \int_{\Omega} fv \: d\Omega \quad \forall v \in W_0^{1,p}(\Omega), \\ u\big|_{\partial \Omega} \equiv 0 \end{cases}
for arbitrary p > 1, where for my purposes f = w^{p-1} is the exponent of some element w beloning to my finite-element space. For my purposes I also need to calculate L^p- and W_0^{1,p}-norms:
||u||_{L^p}^p \colon= \int_{\Omega}|u|^p d\Omega, \quad ||u||_{W_0^{1,p}}^p \colon = \int_{\Omega} |\nabla u|^p d\Omega
(it seems like in-build norm calculation functions like fem.norms.norm are not designed for p \ne 2?)

Having literally no experience with FEniCS, I don’t quite get how it deals with both integration and functions composition. My first guess was to define norms as functions like

def Lp(u):
	return float((abs(u)**p) * dx)
def Wp(u):
	return float((fem.norms.norm(grad(f))**p) *  dx)

but this expectedly leads to different typization errors. I also don’t understand what Form and Measure data types are and how one operates them. Do I need to define something like dx = Measure('dx',domain=mesh) if I need to integrate outside of solvers? Can I work with functions of the form w^{p-1}, |w| directly or there must be a more complicated way to define such things? I would be grateful for any help :pray:

Thank you :hearts:

P.S. Yeah, I figured out I just needed to use assemble to make integrals out of Forms.

Welcome :wink:

Please read Read before posting: How do I get my question answered?. In particular, it’s very difficult for us to comment based on a 4 line snippet of the code.

You may also want to go back to the basics before you try using FEniCS on your actual problem. A possible place to start is The FEniCSx tutorial — FEniCSx tutorial , which has been linked several times in this forum.