[petsc-users] error messages while using snes
barry
barrydog505 at gmail.com
Thu Nov 22 10:22:03 CST 2018
Hi,
I want to solve a nonlinear equation tan(x) = x, and the code i wrote
occur some error.
In the error, it say that I need to use MatAssemblyBegin/End(), but
there aren't any Mat in my program.
How can I fix it?
This is what i write (major part):
int main(){
.....
VecCreate(PETSC_COMM_WORLD,&f);
VecSetSizes(f,PETSC_DECIDE,400);
VecSetFromOptions(f);
VecDuplicate(f,&b);
SNESCreate(PETSC_COMM_WORLD,&snes);
SNESSetFunction(snes,f,FormFunction,&user);
SNESSetComputeInitialGuess(snes,FormInitialGuess,NULL);
SNESSetFromOptions(snes);
SNESSolve(snes,NULL,b);
SNESDestroy(&snes);
.....
}
PetscErrorCode FormFunction(SNES snes,Vec b,Vec f,void *ctx)
{
const PetscScalar *bb;
PetscScalar *ff;
PetscInt i;
PetscErrorCode ierr;
PetscInt A1 = 1;
PetscInt A2 = 1;
VecGetArrayRead(b,&bb);
VecGetArray(f,&ff);
/* Compute function */
for (i=0; i<400; i++) ff[i] = tan(bb[i])-(A1/A2)*bb[i];
VecRestoreArrayRead(b,&bb);
VecRestoreArray(f,&ff);
return 0;
}
PetscErrorCode FormInitialGuess(SNES snes,Vec b,void *ctx)
{
PetscScalar *bb;
PetscInt i;
PetscErrorCode ierr;
VecGetArray(b,&bb);
/* Compute initial guess */
for (i=2; i<400; i++)
{
if (i==0) bb[i] = 0;
else if (i==1) bb[i] = 4.5;
else bb[i] = bb[i-1] + 3.2;
}
VecRestoreArray(b,&bb);
return(0);
}
Here is the error come out:
[0]PETSC ERROR: --------------------- Error Message
--------------------------------------------------------------
[0]PETSC ERROR: Object is in wrong state
[0]PETSC ERROR: Matrix must be assembled by calls to MatAssemblyBegin/End();
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html
for trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.10.2, unknown
[0]PETSC ERROR: ./test2 on a arch-linux2-c-debug named G1ngy by barry
Thu Nov 22 21:07:18 2018
[0]PETSC ERROR: Configure options --with-cc=gcc --with-cxx=g++
--with-fc=gfortran --download-mpich --download-fblaslapack
[0]PETSC ERROR: #1 MatFDColoringCreate() line 469 in
/home/barry/petsc/src/mat/matfd/fdmatrix.c
[0]PETSC ERROR: #2 SNESComputeJacobianDefaultColor() line 84 in
/home/barry/petsc/src/snes/interface/snesj2.c
[0]PETSC ERROR: #3 SNESComputeJacobian() line 2555 in
/home/barry/petsc/src/snes/interface/snes.c
[0]PETSC ERROR: #4 SNESSolve_NEWTONLS() line 222 in
/home/barry/petsc/src/snes/impls/ls/ls.c
[0]PETSC ERROR: #5 SNESSolve() line 4396 in
/home/barry/petsc/src/snes/interface/snes.c
[0]PETSC ERROR: #6 main() line 89 in /home/barry/Desktop/petsc/test2.c
[0]PETSC ERROR: No PETSc Option Table entries
[0]PETSC ERROR: ----------------End of Error Message -------send entire
error message to petsc-maint at mcs.anl.gov----------
application called MPI_Abort(MPI_COMM_WORLD, 73) - process 0
[unset]: write_line error; fd=-1 buf=:cmd=abort exitcode=73
:
system msg for write_line failure : Bad file descriptor
Thank you,
Barry
More information about the petsc-users
mailing list