[petsc-users] Get Stuck in SNES

behzad baghapour behzad.baghapour at gmail.com
Wed Nov 23 01:06:47 CST 2011


Thanks for your help.

Here is my procedure:

1- Define context ( as in previous email )

2- Related the addresses ( as in previous email )

4- create the context
    FieldCtx FC;

3- call residual routine:
    ierr = SNESSetFunction( snes, r, _petsc_residualVector, (void*)&FC );
CHKERRQ( ierr );

4- define residual routine: ( x is solution and r is residual vector )
PetscErrorCode solver::_petsc_residualVector( SNES snes, Vec x, Vec r,
void* ctx )
{
    ierr = VecGetArray( x, &xx ); CHKERRQ( ierr );

    for( c=0; c<ne; c++ ) for( p=0; p<tot; p++ )
    FC->e[c].Q[p] = xx[c*(noe*num)+p];

    ierr = VecRestoreArray( x, &xx ); CHKERRQ( ierr );

    interiorFlux( FC->flw, FC->e );
    faceFlux    ( FC->flw, FC->f, FC->e );

    ierr = VecGetArray( r, &rr ); CHKERRQ( ierr );

    for( c=0; c<ne; c++ )
    {
        for( p=0; p<tot; p++ ) rr[c*tot+p] = FC->e[c].R[p];
    }

    ierr = VecRestoreArray( r, &rr ); CHKERRQ( ierr );
}

5- same procedure for Jacobian

6- set opitions

7- solve with SNESSolve()

Is it look right with SNES ???

Thanks again for your attention.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20111123/5d65352e/attachment-0001.htm>


More information about the petsc-users mailing list