In mathematical sense, the following two sapces are exactly same

**Case1:**

```
Xh = VectorH1(mesh, order = r)
```

&

**Case2:**

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

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

In mathematical sense, the following two sapces are exactly same

**Case1:**

```
Xh = VectorH1(mesh, order = r)
```

&

**Case2:**

```
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.

Joachim