# [petsc-users] Fwd: Inquiry about the dual space (PetscFECreateTabulation_Basic)

Matthew Knepley knepley at gmail.com
Fri Apr 21 09:57:34 CDT 2023

```On Fri, Apr 21, 2023 at 10:36 AM neil liu <liufield at gmail.com> wrote:

> When you say "For multicomponent spaces, we currently do not represent it
> as a tensor product over the scalar space, so we see 6 basis vectors."
> Here, muticomponent = two dimensional ?
>

If you have a vector in a two-dimensional space, it has 2 components, like
our coordinate vector.

> I am a little confused about the dimensions of the basis functions here.
> From
> https://petsc.org/release//src/dm/dt/fe/impls/basic/febasic.c.html#PETSCFEBASIC
>
> 144:     /* B[npoints, nodes, Nc] = tmpB[npoints, prime, Nc] * invV[prime, nodes] */
>
> How do you define tmpB here (npoints =3, prime =6, Nc =2)? I can get tmpB from
>
> PetscSpaceEvaluate_Polynomial, where, tmpB (1x9) is (the prime polynomial is defined by 1 x y))
>
> [ 1 -0.6667 -0.6667 1 -0.6667 0.3333 1 0.3333 -0.6666]. How do you transform from this 1x9 to 3x6x2 there.
>
>
npoints is the number of quadrature points at which to evaluate

nodes (pdim) is the number of functions in the space

Nc is the number of components for each function.

So a P1 basis for vectors looks like

/ 1 \  / 0 \ / x \ / 0 \ / y \ / 0 \
\ 0 /  \ 1 / \ 0 / \ x / \ 0 / \ y /

six vectors with 2 components each.

Thanks,

Matt

> Thanks,
>
> Xiaodong
>
>
>
>
>
>
> On Fri, Apr 21, 2023 at 10:05 AM Matthew Knepley <knepley at gmail.com>
> wrote:
>
>> On Fri, Apr 21, 2023 at 10:02 AM neil liu <liufield at gmail.com> wrote:
>>
>>> Hello, Petsc group,
>>>
>>> I am learning the FE structure in Petsc by running case
>>> https://petsc.org/main/src/snes/tutorials/ex12.c.html with -run_type
>>> test -bc_type dirichlet -dm_plex_interpolate 0 -petscspace_degree 1
>>> -show_initial -dm_plex_print_fem 1
>>>
>>
>> -dm_plex_print_fem 5 will print much more
>>
>>
>>> When I check the subroutine PetscFECreateTabulation_Basic, I can not
>>> understand some parameters there.
>>>
>>> For the following lines in the file (
>>> https://petsc.org/release//src/dm/dt/fe/impls/basic/febasic.c.html#PETSCFEBASIC
>>> )
>>>
>>> 135:   PetscCall <https://petsc.org/release//manualpages/Sys/PetscCall/>(PetscDualSpaceGetDimension <https://petsc.org/release//manualpages/DUALSPACE/PetscDualSpaceGetDimension/>(fem->dualSpace, &pdim));136:   PetscCall <https://petsc.org/release//manualpages/Sys/PetscCall/>(PetscFEGetNumComponents <https://petsc.org/release//manualpages/FE/PetscFEGetNumComponents/>(fem, &Nc));
>>>
>>> Here, Nc = 2, pdim =6. I am running a scalar case with degree of 1,
>>>
>>> I expect Nc = 1 and pdim =3. Could you please explain this? In addition,
>>>
>>> Sure. I am guessing that you are looking at the tabulation for the
>> coordinate space. Here you are in 2 dimensions, so the
>> coordinate space has Nc = 2. For multicomponent spaces, we currently do
>> not represent it as a tensor product over the
>> scalar space, so we see 6 basis vectors.
>>
>>   Thanks,
>>
>>      Matt
>>
>>> Thanks,
>>>
>>> Xiaodong
>>>
>>>
>>>
>>>
>>
>> --
>> What most experimenters take for granted before they begin their
>> experiments is infinitely more interesting than any results to which their
>> -- Norbert Wiener
>>
>> https://www.cse.buffalo.edu/~knepley/
>> <http://www.cse.buffalo.edu/~knepley/>
>>
>

--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their