The difference in compound finite element spaces

In mathematical sense, the following two sapces are exactly same

Xh = VectorH1(mesh, order = r)


Xh = H1(mesh, order = r)*H1(mesh, order = r)

BUT, in ngsolve , for instance, Grad works only in the Case1, why not Case2?

Hi Coulson,

if you write fes**3 (or, equivalently VectorValued(fes,3), you get a vector-valued space, the differential operators are inherited. The tensor-dimension is increased by one, and the space-component is the leading tensor index.

VectorH1 builds such a vector-valued H1 space, and a little more: The dimension is exactly the spatial dimension of the mesh, and it defines in addition the div operator.

A product space can be formed between arbitrary spaces (e.g. HCurl*L2*NumberSpace). Here it does not make sense to promote operators to the product-space.