[petsc-users] error messages while using snes

Matthew Knepley knepley at gmail.com
Thu Nov 22 13:09:52 CST 2018


On Thu, Nov 22, 2018 at 11:23 AM barry via petsc-users <
petsc-users at mcs.anl.gov> wrote:

> 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?
>

You could

  a) Use a method without a Jacobian, like nonlinear Richardson

  b) Use Newton with a finite difference Jacobian, -snes_type fd, but this
is not scalable

  c) Provide a Jacobian for Newton

  Thanks,

    Matt


> 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
>
>

-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20181122/b7085b06/attachment.html>


More information about the petsc-users mailing list