[petsc-dev] The questions about MatSetValuesLocal
Lulu Liu
lulu.liu at kaust.edu.sa
Fri Sep 27 13:00:46 CDT 2013
Try to build analytical Jacobian with 4 blocks, I modify the code
src/snes/examples/tutorials/ex28.c
(1D problem, however, my problem is 2D). When building one block of Jacobian,
I got the errors like this:
0]PETSC ERROR: --------------------- Error Message
------------------------------------
[0]PETSC ERROR: Argument out of range!
[0]PETSC ERROR: New nonzero at (28,58) caused a malloc!
[0]PETSC ERROR: MatSetValues_SeqAIJ() line 353 in src/mat/impls/aij/seq/aij
.c
[0]PETSC ERROR: MatSetValues() line 1124 in src/mat/interface/matrix.c
[0]PETSC ERROR: MatSetValuesLocal() line 2012 in src/mat/interface/matrix.c
[0]PETSC ERROR: FormJacobianLocal_P() line 556 in /Users/liul
/Desktop/FieldSplitcase2.c
[0]PETSC ERROR: FormJacobian_All() line 847 in /Users/liul
/Desktop/FieldSplitcase2.c
[0]PETSC ERROR: SNESComputeJacobian() line 2227 in src/snes/interface/snes.c
[0]PETSC ERROR: SNESSolve_NEWTONLS() line 233 in src/snes/impls/ls/ls.c
[0]PETSC ERROR: SNESSolve() line 3789 in src/snes/interface/snes.c
[0]PETSC ERROR: main() line 1062 in /Users/liul/Desktop/FieldSplitcase2.c
application called MPI_Abort(MPI_COMM_WORLD, 63) - process 0
[unset]: aborting job:
application called MPI_Abort(MPI_COMM_WORLD, 63) - process 0
I think that I am not call MatSetValuesLocal correctly, right? How to fix
it? Thanks!
for (j=yints; j<yinte; j++) {
for (i=xints; i<xinte; i++) {
// row.i = i; row.j = j;
row = i+j*info->xm;
if (i==0 || j==0 || i==mx-1 || j==my-1) {
num = 0; v_l=0.0; v_r=0.0; v_t=0.0; v_b=0.0;
if (j!=0) {
v=-1;v_b=1;
J=row-info->xm;
ierr = MatSetValuesLocal(Bpp,1,&row,1,&J,&v,INSERT_VALUES);
CHKERRQ(ierr);
}
if (i!=0) {
v = -1; v_l=1;
J=row-1;
ierr = MatSetValuesLocal(Bpp,1,&row,1,&J,&v,INSERT_VALUES);
CHKERRQ(ierr);
}
if (i!=mx-1) {
v = -1;v_r=1;
J=row+1;
ierr = MatSetValuesLocal(Bpp,1,&row,1,&J,&v,INSERT_VALUES);
CHKERRQ(ierr);
}
if (j!=my-1) {
v = -1;v_t=1;
J=row+info->xm;
ierr = MatSetValuesLocal(Bpp,1,&row,1,&J,&v,INSERT_VALUES);
CHKERRQ(ierr);
}
v = v_l+v_r+v_t+v_b;
if(i==0&&j==0){ v+=2;}
J=row;
ierr = MatSetValuesLocal(Bpp,1,&row,1,&J,&v,INSERT_VALUES);CHKERRQ(
ierr);
}else{
PetscInt cols[]={row-info->xm,row-1,row+1,row+info->xm,row};
PetscScalar vals[]= {-1,-1,-1,-1,4};
ierr = MatSetValuesLocal(Bpp,1,&row,5,cols,vals,INSERT_VALUES);
CHKERRQ(ierr);
}
}
}
--
------------------------------
This message and its contents, including attachments are intended solely
for the original recipient. If you are not the intended recipient or have
received this message in error, please notify me immediately and delete
this message from your computer system. Any unauthorized use or
distribution is prohibited. Please consider the environment before printing
this email.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20130927/180b8e26/attachment.html>
More information about the petsc-dev
mailing list