I have a question about the performance in interpolation in finite element method.

In the Official Document, it is suggested to do small size array operations with `StaticArrays.jl`

.

In my finite element program, the global node displacement is calculated first and stored in a `Vector`

, and I want to calculate the displacement in the integral points inside the element. For each integral point, I get the node displacement of the element from the global displacement vector and store it as a `MVector`

like

```
@views poidis.disfre_nod .= nodfre_nod[ithdim_poi,poidis.elecon_nod]
@views poidis.noddis_ele .= MVector{numnod_ele}(noddis_nod[poidis.disfre_nod])
```

The shape function is also a `MVector`

. Then I calculate the displacement of integral point by

```
poidis.poidis_poi[ithdim_poi,ithpoi_poi] = dot(poidis.shafun_ele,poidis.noddis_ele)
```

I need to loop over all the elements, then I test the memory allocation ,the result is

```
0 @views poidis.disfre_nod .= nodfre_nod[ithdim_poi,poidis.elecon_nod]
13747184 @views poidis.noddis_ele .= MVector{numnod_ele}(noddis_nod[poidis.disfre_nod])
3436800 poidis.poidis_poi[ithdim_poi,ithpoi_poi] = dot(poidis.shafun_ele,poidis.noddis_ele)
```

As we can see, it is a huge number. I thought maybe the type conversion from `Vector`

to `MVector`

is time consuming, then I make a little change like

```
0 @views poidis.disfre_nod .= nodfre_nod[ithdim_poi,poidis.elecon_nod]
- # @views poidis.noddis_ele .= MVector{numnod_ele}(noddis_nod[poidis.disfre_nod])
10310352 @views poidis.noddis_ele .= noddis_nod[poidis.disfre_nod]
3436800 poidis.poidis_poi[ithdim_poi,ithpoi_poi] = dot(poidis.shafun_ele,poidis.noddis_ele)
```

The memory allocation is lower, but still a big number. What is the possible reason?

Another question is that why the `dot`

of two `MVector`

need to allocate so much memory?

Thanks for your suggestions! If necessary, I will post the code.