Thank you very much!

Best regards,

Feng

________________________________________
From: Barry Smith [[email protected]]
Sent: Saturday, September 20, 2014 12:12 PM
To: Feng  Shi
Cc: Jed Brown; [email protected]
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 <[email protected]> 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 [[email protected]]
> Sent: Saturday, September 20, 2014 1:16 AM
> To: Feng  Shi; [email protected]
> Subject: Re: [petsc-users] How to set matrix values using 
> "MatSetValuesStencil" when dof>1 idxn -
>
> Feng  Shi <[email protected]> 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.

Reply via email to