# [petsc-users] How to set matrix values using "MatSetValuesStencil" when dof>1 idxn -

Feng Shi fshi at fit.edu
Sat Sep 20 12:04:30 CDT 2014

```Thank you very much!

Best regards,

Feng

________________________________________
From: Barry Smith [bsmith at mcs.anl.gov]
Sent: Saturday, September 20, 2014 12:12 PM
To: Feng  Shi
Cc: Jed Brown; petsc-users at mcs.anl.gov
Subject: Re: [petsc-users] How to set matrix values using "MatSetValuesStencil" when dof>1 idxn -

When using MatSetValuesStencil() for dof > 1 note that

typedef struct {
PetscInt k,j,i,c;
} MatStencil;

For dof > 1 you need to assign the k,j,i AND c value. (c corresponds to the dof) for each entry you put in the matrix. For example
row[0].k = 2; row[0].j=3; row[0].i= 9; row[0].c = 1 (this is for the second dof at the grid point 9,3,2) c=0 is for the first dof

Only use the blocked stencil form if you really have blocks of non zeros in the matrix (i.e. all the dof are fully coupled with each other and the neighboring points).

Barry

On Sep 20, 2014, at 12:55 AM, Feng Shi <fshi at fit.edu> wrote:

> I'm sorry I've no idea on the finite element, but for the finite difference, say for a 3-D case, we could use 7-point differentiation method, so the routine would be MatSetValuesStencil(A_mat, 1, &row, 7, col, val, INSERT_VALUES). I know 7 denotes the 7-points in space for differentiation and array val[0:6]. If I use MatSetValuesBlockedStencil, am I right using MatSetValuesBlockedStencil(A_mat, 1, &row, 7, col, val, INSERT_VALUES), where array is val[0:1][0:7] for dof=2?
>
> Best regards,
>
> ________________________________________
> From: Jed Brown [jed at jedbrown.org]
> Sent: Saturday, September 20, 2014 1:16 AM
> To: Feng  Shi; petsc-users at mcs.anl.gov
> Subject: Re: [petsc-users] How to set matrix values using "MatSetValuesStencil" when dof>1 idxn -
>
> Feng  Shi <fshi at fit.edu> writes:
>
>> Hi Folks,
>>
>> I get hard times in using the routine MatSetValuesStencil for
>> dof>1. There numerous examples for dof=1 but dof>1, neither in the
>> Petsc manual. The routine on-line manual
>> (http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValuesStencil.html) says, idxm/idxn are grid coordinates (and component number when dof > 1) for matrix columns being entered. What is the general form of these indices?
>
> If you have dof>1, please use MatSetValuesBlockedStencil.  See
> src/snes/examples/tutorials/ex48.c for an example usage for a
> finite-element method.
>
>> Am I right, for example, for idxn, if I write idxn[ix, dof].i?
>
> That's not valid syntax, so I don't know what you're asking.

```

More information about the petsc-users mailing list