<!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>./pgfem -pc_type none does not work either, leading to 
negative jacobian of element.</FONT></DIV>
<DIV><FONT size=2>The SNES solve is soling&nbsp;a meshfree method.</FONT></DIV>
<DIV><FONT size=2>I attached the segment of code.</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>What is the output for -mat_view, are all the output the 
jacobian, or do they inlcude preconditioning matrix?</FONT></DIV>
<DIV><FONT size=2>I found the output matrices do not have the same nonzero 
structure.</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>PetscErrorCode FormFunction(SNES snes,Vec u, Vec r, void 
*ctx)<BR>{<BR>&nbsp; Log::Send(Log::Info, " Form Function ...");<BR>&nbsp; 
ApplicationCtx *user = (ApplicationCtx*) ctx;<BR>&nbsp; //NOTE: r is the 
nonlinea function, NOT the r.h.s term<BR>&nbsp; //the r.h.s is '-r'<BR>&nbsp; 
//u is the solution during the current Newton-Raphson iteration<BR>&nbsp; //not 
an increment </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //VecSet(u,0.001);<BR>&nbsp; 
//user-&gt;pDomain-&gt;pPhyDomain-&gt;GetMesh(0)-&gt;GetEBoundary()-&gt;Treatment(NULL,&amp;u);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //printf("solutoin 
vector.................\n");<BR>&nbsp; 
//VecView(u,PETSC_VIEWER_STDOUT_WORLD);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //dof = du<BR>&nbsp; VecAYPX(user-&gt;oldu, -1, 
u);<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;UpdateDofs(user-&gt;oldu);<BR>&nbsp; 
VecCopy(u,user-&gt;oldu);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //x = x + du<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;UpdateConfiguration(user-&gt;oldu);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //QPoint's gradients in current config, new jacobian, 
new locations etc.<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;UpdateQPoints();</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //mfree connectivity in the new configuration<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;MFreeConnectivity();</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //F = (dX/dx)^-1<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;DeformGradients();</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //stress<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;UpdateStress();</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //f(x) of J(x) dx = f(x)<BR>&nbsp; 
FormInitialGuess(r);<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;InternalForce(r);<BR>&nbsp; 
VecAssemblyBegin(r);<BR>&nbsp; VecAssemblyEnd(r);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;Loads(user-&gt;pDomain-&gt;contrl.loadContlType, 
-1.0*user-&gt;lambda, &amp;u, &amp;r);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; //printf("residual 
force.................\n");<BR>&nbsp; 
//VecView(r,PETSC_VIEWER_STDOUT_WORLD);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; PetscFunctionReturn(0);<BR>}</FONT></DIV>
<DIV>&nbsp;</DIV><FONT size=2>
<DIV><BR>PetscErrorCode FormJacobian(SNES snes, Vec x, Mat *jac/*jacobian*/, Mat 
*B/*precon*/,MatStructure*flag,void *ctx)<BR>{<BR>&nbsp; Log::Send(Log::Info, " 
Form Jacobian ...");<BR>&nbsp; ApplicationCtx *user = (ApplicationCtx*) 
ctx;<BR>&nbsp; <BR>&nbsp; //initialize jacobian matrix<BR>&nbsp; 
MatZeroEntries(*B);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; //assemble<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;TangentMatrix(*B);<BR>&nbsp; 
MatAssemblyBegin(*B,MAT_FINAL_ASSEMBLY);<BR>&nbsp; 
MatAssemblyEnd(*B,MAT_FINAL_ASSEMBLY);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; //boundary treatment, mainly MatZeroRows()<BR>&nbsp; 
user-&gt;pDomain-&gt;pPhyDomain-&gt;Constraints(user-&gt;pDomain-&gt;contrl.loadContlType, 
B);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; //printf("Global matrix........\n");<BR>&nbsp; 
//MatView(*B,PETSC_VIEWER_STDOUT_WORLD);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; if (*jac != *B){<BR>&nbsp;&nbsp;&nbsp; 
MatAssemblyBegin(*jac,MAT_FINAL_ASSEMBLY);<BR>&nbsp;&nbsp;&nbsp; 
MatAssemblyEnd(*jac,MAT_FINAL_ASSEMBLY);<BR>&nbsp; }</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; ::DumpMatrixToDisk(*B);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; *flag = SAME_NONZERO_PATTERN;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; PetscFunctionReturn(0);<BR>}<BR></DIV>
<DIV>&nbsp;</DIV></FONT>
<DIV>&nbsp;</DIV>
<DIV>&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> Monday, May 16, 2011 9:04 PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> Re: [petsc-users] SNES 
  convergence issue</DIV>
  <DIV><BR></DIV>
  <DIV class=gmail_quote>On Mon, May 16, 2011 at 14:54, 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>&nbsp;12 KSP preconditioned resid norm 5.794625326821e+000 true resid 
    norm 5.490686672936e+006 ||Ae||/||Ax|| 7.765003561961e+004<BR>&nbsp;13 KSP 
    preconditioned resid norm 7.239823936251e-001 true resid norm 
    4.262009749173e+005 ||Ae||/||Ax|| 6.027391992073e+003<BR>&nbsp;14 KSP 
    preconditioned resid norm 6.718858761053e-001 true resid norm 
    7.089916382344e+005 ||Ae||/||Ax|| 1.002665590704e+004<BR>&nbsp;15 KSP 
    preconditioned resid norm 6.284315560280e-001 true resid norm 
    4.441924320726e+005 ||Ae||/||Ax|| 6.281829619309e+003<BR>&nbsp;16 KSP 
    preconditioned resid norm 6.861179511523e-011 true resid norm 
    1.032548577293e+006 ||Ae||/||Ax|| 
  1.460244202260e+004</DIV></BLOCKQUOTE></DIV><BR>
  <DIV>Notice how the true residual is blowing up while the GMRES estimate 
  converges. (The language here is not correct, "preconditioned resid norm" in 
  this case is actually the unpreconditioned norm as estimated by FGMRES.) This 
  indicates that the preconditioner is singular which could be due to lack of 
  pivoting. If you run with -pc_type none, it should converge correctly. Do that 
  and see if SNES is converging properly. Also try -pc_type lu 
  -pc_factor_mat_solver_package superlu (or mumps or umfpack) if you have any of 
  these packages installed.</DIV>
  <DIV><BR></DIV>
  <DIV>What equations are you solving and with what 
discretization?</DIV></BLOCKQUOTE></BODY></HTML>