<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.19019">
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2>&nbsp; char msg[125];<BR>&nbsp; SNES snes;<BR>&nbsp; 
ApplicationCtx ctx;<BR>&nbsp; PetscErrorCode ierr;<BR>&nbsp; 
PetscReal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abstol,rtol,stol;<BR>&nbsp; 
PetscInt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; its,maxit,maxf;<BR>&nbsp; PetscReal 
none = -1.0;<BR>&nbsp; PetscScalar zero = 0;<BR>&nbsp; ctx.pDomain = 
this;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; 
pPhyDomain-&gt;Initialize(ASSEMBLY_FREE_MESH);<BR>&nbsp; PetscInt&nbsp; 
N&nbsp;&nbsp;&nbsp; = pPhyDomain-&gt;GetEquCount();</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; Mat J;<BR>&nbsp; Vec u,r;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; 
SNESCreate(PETSC_COMM_WORLD,&amp;snes);<BR>&nbsp;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; VecCreate(PETSC_COMM_WORLD,&amp;u); <BR>&nbsp; 
VecSetSizes(u,N,N);<BR>&nbsp; VecSetFromOptions(u);<BR>&nbsp; 
VecDuplicate(u,&amp;r);<BR>&nbsp; VecDuplicate(u,&amp;ctx.oldu);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; 
SNESSetFunction(snes,r,FormFunction,&amp;ctx);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; MatCreate(PETSC_COMM_WORLD,&amp;J);<BR>&nbsp; 
MatSetSizes(J,PETSC_DECIDE,PETSC_DECIDE,N,N);<BR>&nbsp; 
MatSetFromOptions(J);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; 
SNESSetJacobian(snes,J,J,FormJacobian,&amp;ctx);<BR>&nbsp; <BR>&nbsp; 
PetscObjectSetName((PetscObject)u,"Approximate Solution");<BR>&nbsp; 
SNESSetFromOptions(snes);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; <BR>&nbsp; ierr = 
SNESGetTolerances(snes,&amp;abstol,&amp;rtol,&amp;stol,&amp;maxit,&amp;maxf);CHKERRQ(ierr);<BR>&nbsp; 
ierr = PetscPrintf(PETSC_COMM_WORLD,"atol=%G, rtol=%G, stol=%G, maxit=%D, 
maxf=%D\n",abstol,rtol,stol,maxit,maxf);CHKERRQ(ierr);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; </FONT></DIV>
<DIV><FONT size=2>&nbsp; //incremental lambda<BR>&nbsp; int step = 0;<BR>&nbsp; 
ctx.dlambda = 1.0/ctx.pDomain-&gt;contrl.loadSteps;<BR>&nbsp; for(double lambda 
= ctx.dlambda; lambda &lt;= 1.0; lambda += ctx.dlambda){<BR>&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; ctx.lambda = lambda * 
ctx.pDomain-&gt;contrl.loadScaler;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; //initialize previous 
displacment<BR>&nbsp;&nbsp;&nbsp; VecSet(ctx.oldu,0.0);<BR>&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; ierr = FormInitialGuess(u);CHKERRQ(ierr);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; //solve<BR>&nbsp;&nbsp;&nbsp; ierr = 
SNESSolve(snes,PETSC_NULL,u);CHKERRQ(ierr);<BR>&nbsp;&nbsp;&nbsp; 
SNESGetIterationNumber(snes,&amp;its);<BR>&nbsp;&nbsp;&nbsp; sprintf(msg,"STEP 
%d (Newton iterations: %d)\n\n",step, its); Log::Send(Log::Info, 
msg);<BR>&nbsp;&nbsp;&nbsp; ierr = PetscPrintf(PETSC_COMM_WORLD,"STEP %D (Newton 
iterations: %D)\n\n",step, its);CHKERRQ(ierr);<BR>&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; //postprocess<BR>&nbsp;&nbsp;&nbsp; if(step % 
ctx.pDomain-&gt;contrl.outputFrequency == 0){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
pPhyDomain-&gt;WriteConfiguration(step);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
pPhyDomain-&gt;WriteResultFiles(step);<BR>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; //convergence test<BR>&nbsp;&nbsp;&nbsp; 
SNESConvergedReason reason;<BR>&nbsp;&nbsp;&nbsp; SNESGetConvergedReason(snes, 
&amp;reason);<BR>&nbsp;&nbsp;&nbsp; if(reason &lt; 
0){//diverged<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log::Send(Log::Info, " 
calculation diverged");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; 
"diverged reason: " &lt;&lt; reason &lt;&lt; 
endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp; 
}</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; //advance<BR>&nbsp;&nbsp;&nbsp; step 
++;<BR>&nbsp; }</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; VecDestroy(r);<BR>&nbsp; MatDestroy(J);<BR>&nbsp; 
VecDestroy(u);<BR>&nbsp; SNESDestroy(snes);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; PetscFunctionReturn(0);<BR>}</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; total number of function evaluations=4<BR>&nbsp; KSP 
Object:<BR>&nbsp;&nbsp;&nbsp; type: gmres<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
GMRES: restart=30, using Classical (unmodified) Gram-Schmidt 
Orthogonaliza<BR>tion with no iterative 
refinement<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GMRES: happy breakdown tolerance 
1e-030<BR>&nbsp;&nbsp;&nbsp; maximum iterations=10000, initial guess is 
zero<BR>&nbsp;&nbsp;&nbsp; tolerances:&nbsp; relative=1e-005, absolute=1e-050, 
divergence=10000<BR>&nbsp;&nbsp;&nbsp; left preconditioning<BR>&nbsp; PC 
Object:<BR>&nbsp;&nbsp;&nbsp; type: ilu<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: 0 
levels of fill<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: factor fill ratio 
allocated 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: tolerance for zero pivot 
1e-012<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
out-of-place 
factorization<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
matrix ordering: natural<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: factor fill 
ratio needed 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Factored matrix 
follows<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matrix 
Object:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
type=seqaij, rows=24, 
cols=24<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
total: nonzeros=392, allocated 
nonzeros=840<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
using I-node routines: found 15 nodes, limit used is 5<BR>&nbsp;&nbsp;&nbsp; 
linear system matrix = precond matrix:<BR>&nbsp;&nbsp;&nbsp; Matrix 
Object:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type=seqaij, rows=24, 
cols=24<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total: nonzeros=392, allocated 
nonzeros=3480<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using I-node 
routines: found 15 nodes, limit used is 5<BR>STEP 3 (Newton iterations: 
3)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>SNES Object:<BR>&nbsp; type: ls<BR>&nbsp;&nbsp;&nbsp; line 
search variant: SNESLineSearchCubic<BR>&nbsp;&nbsp;&nbsp; alpha=0.0001, 
maxstep=1e+008, steptol=1e-012<BR>&nbsp; maximum iterations=50, maximum function 
evaluations=10000<BR>&nbsp; tolerances: relative=1e-008, absolute=1e-050, 
solution=1e-008<BR>&nbsp; total number of linear solver iterations=3<BR>&nbsp; 
total number of function evaluations=4<BR>&nbsp; KSP 
Object:<BR>&nbsp;&nbsp;&nbsp; type: gmres<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
GMRES: restart=30, using Classical (unmodified) Gram-Schmidt 
Orthogonaliza<BR>tion with no iterative 
refinement<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GMRES: happy breakdown tolerance 
1e-030<BR>&nbsp;&nbsp;&nbsp; maximum iterations=10000, initial guess is 
zero</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>The output:</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>C:\cygwin\home\rabbit\pGFEM-test&gt;pgfem -snes_view 
-options_tableclear<BR>atol=1e-050, rtol=1e-008, stol=1e-008, maxit=50, 
maxf=10000<BR>SNES Object:<BR>&nbsp; type: ls<BR>&nbsp;&nbsp;&nbsp; line search 
variant: SNESLineSearchCubic<BR>&nbsp;&nbsp;&nbsp; alpha=0.0001, maxstep=1e+008, 
steptol=1e-012<BR>&nbsp; maximum iterations=50, maximum function 
evaluations=10000<BR>&nbsp; tolerances: relative=1e-008, absolute=1e-050, 
solution=1e-008<BR>&nbsp; total number of linear solver iterations=3<BR>&nbsp; 
total number of function evaluations=4<BR>&nbsp; KSP 
Object:<BR>&nbsp;&nbsp;&nbsp; type: gmres<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
GMRES: restart=30, using Classical (unmodified) Gram-Schmidt 
Orthogonaliza<BR>tion with no iterative 
refinement<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GMRES: happy breakdown tolerance 
1e-030<BR>&nbsp;&nbsp;&nbsp; maximum iterations=10000, initial guess is 
zero<BR>&nbsp;&nbsp;&nbsp; tolerances:&nbsp; relative=1e-005, absolute=1e-050, 
divergence=10000<BR>&nbsp;&nbsp;&nbsp; left preconditioning<BR>&nbsp; PC 
Object:<BR>&nbsp;&nbsp;&nbsp; type: ilu<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: 0 
levels of fill<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: factor fill ratio 
allocated 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: tolerance for zero pivot 
1e-012<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
out-of-place 
factorization<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
matrix ordering: natural<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: factor fill 
ratio needed 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Factored matrix 
follows<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matrix 
Object:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
type=seqaij, rows=24, 
cols=24<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
total: nonzeros=392, allocated 
nonzeros=840<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
using I-node routines: found 15 nodes, limit used is 5<BR>&nbsp;&nbsp;&nbsp; 
linear system matrix = precond matrix:<BR>&nbsp;&nbsp;&nbsp; Matrix 
Object:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type=seqaij, rows=24, 
cols=24<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total: nonzeros=392, allocated 
nonzeros=1320<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using I-node 
routines: found 15 nodes, limit used is 5<BR>STEP 0 (Newton iterations: 
3)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>SNES Object:<BR>&nbsp; type: ls<BR>&nbsp;&nbsp;&nbsp; line 
search variant: SNESLineSearchCubic<BR>&nbsp;&nbsp;&nbsp; alpha=0.0001, 
maxstep=1e+008, steptol=1e-012<BR>&nbsp; maximum iterations=50, maximum function 
evaluations=10000<BR>&nbsp; tolerances: relative=1e-008, absolute=1e-050, 
solution=1e-008<BR>&nbsp; total number of linear solver iterations=3<BR>&nbsp; 
total number of function evaluations=4<BR>&nbsp; KSP 
Object:<BR>&nbsp;&nbsp;&nbsp; type: gmres<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
GMRES: restart=30, using Classical (unmodified) Gram-Schmidt 
Orthogonaliza<BR>tion with no iterative 
refinement<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GMRES: happy breakdown tolerance 
1e-030<BR>&nbsp;&nbsp;&nbsp; maximum iterations=10000, initial guess is 
zero<BR>&nbsp;&nbsp;&nbsp; tolerances:&nbsp; relative=1e-005, absolute=1e-050, 
divergence=10000<BR>&nbsp;&nbsp;&nbsp; left preconditioning<BR>&nbsp; PC 
Object:<BR>&nbsp;&nbsp;&nbsp; type: ilu<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: 0 
levels of fill<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: factor fill ratio 
allocated 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: tolerance for zero pivot 
1e-012<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
out-of-place 
factorization<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
matrix ordering: natural<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILU: factor fill 
ratio needed 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Factored matrix 
follows<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matrix 
Object:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
type=seqaij, rows=24, 
cols=24<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
total: nonzeros=392, allocated 
nonzeros=840<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
using I-node routines: found 15 nodes, limit used is 5<BR>&nbsp;&nbsp;&nbsp; 
linear system matrix = precond matrix:<BR>&nbsp;&nbsp;&nbsp; Matrix 
Object:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type=seqaij, rows=24, 
cols=24<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; total: nonzeros=392, allocated 
nonzeros=2040<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using I-node 
routines: found 15 nodes, limit used is 5<BR>STEP 1 (Newton iterations: 
3)</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>^C<BR>C:\cygwin\home\rabbit\pGFEM-test&gt;</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<BLOCKQUOTE 
style="BORDER-LEFT: #000000 2px solid; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px" 
dir=ltr>
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="FONT: 10pt arial; BACKGROUND: #e4e4e4; font-color: black"><B>From:</B> 
  <A title=jed@59A2.org href="mailto:jed@59A2.org">Jed Brown</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=petsc-users@mcs.anl.gov 
  href="mailto:petsc-users@mcs.anl.gov">PETSc users list</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Thursday, May 12, 2011 6:41 
PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> Re: [petsc-users] nonzero 
  prescribed boundary condition</DIV>
  <DIV><BR></DIV>
  <DIV class=gmail_quote>On Thu, May 12, 2011 at 06:35, Tian(ICT) <SPAN 
  dir=ltr>&lt;<A 
  href="mailto:rongtian@ncic.ac.cn">rongtian@ncic.ac.cn</A>&gt;</SPAN> 
wrote:<BR>
  <BLOCKQUOTE 
  style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
  class=gmail_quote>
    <DIV id=:2h5>Without any option, SNES converges never calling 
    FormJacobian,<BR>and the solution seems correct.<BR><BR>What is the reason 
    for that the SNES solver never calls FormJacobian (mf option was not 
    used)?</DIV></BLOCKQUOTE></DIV><BR>
  <DIV>Please send the following:</DIV>
  <DIV><BR></DIV>
  <DIV>1. The code where you configure the solver, everything from SNESCreate to 
  SNESSolve</DIV>
  <DIV><BR></DIV>
  <DIV>2. The complete command line that you run with.</DIV>
  <DIV><BR></DIV>
  <DIV>3. Output when you add "-snes_view -options_table" to the command 
  line</DIV></BLOCKQUOTE></BODY></HTML>