[petsc-users] changing DAs matrix and coefficients ordering

ilyas yilmaz ilyasy at chalmers.se
Thu Feb 4 13:38:43 CST 2010


Thank you Jed,
Now, it is working.

Ilyas.



> On Tue, 2 Feb 2010 17:36:34 +0100 (CET), "ilyas yilmaz"
> <ilyasy at chalmers.se> wrote:
>> I have actually tried it before, but I failed. I guess I am missing
>> something. Could you please explain me how to do this on a simple DAs
>> example?
>
> Suppose you have an M by N region that you want to index as x[i][j] with
> i in [0..M) and j in [0..N).
>
>   DACreate2d(comm,DA_NOPERIODIC,DA_STENCIL_BOX,N,M,n,m,dof,s,ly,lx,&da);
>
> then something like
>
>   PetscErrorCode FormFunction(DA da,Vec X,Vec F,void *ctx) {
>     Node **x,**f;
>     PetscInt i,j,xs,ys,xm,ym,mx,my;
>     ...
>     DAGetInfo(da,0, &my,&mx,0, 0,0,0, 0,0,0,0);
>     hx = Lx / mx;
>     hy = Ly / my;
>     DAGetCorners(da,&ys,&xs,0,&ym,&xm,0);
>     DAVecGetArray(da,X,&x);
>     DAVecGetArray(da,F,&f);
>     for (i=xs; i<xs+xm; i++) {
>       for (j=ys; j<ys+ym; j++) {
>         f[i][j].u = -x[i-1][j].u -x[i][j-1].u + 4*x[i][j].u - x[i][j+1].u
> - x[i+1][j].u;
>         ...
>
>
> If you're still confused and want a working example, PETSc-dev has
>
>   http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-dev/src/snes/examples/tutorials/ex48.c.html
>
> but it is overly complex to demonstrate this point since it manages both
> a 2D and 3D DA with compatible layouts.
>
> Jed
>




More information about the petsc-users mailing list