<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
Thanks&nbsp;Barry, sorry for careless reading the code.<BR>&nbsp;<BR>
&gt; From: bsmith@mcs.anl.gov<BR>&gt; Date: Mon, 3 Jan 2011 10:32:17 -0600<BR>&gt; To: petsc-users@mcs.anl.gov<BR>&gt; Subject: Re: [petsc-users] result of ex2f.F in petsc-3.1-p5\src\ksp\ksp\examples\tutorials<BR>&gt; <BR>&gt; <BR>&gt; call KSPSolve(ksp,b,x,ierr)<BR>&gt; <BR>&gt; ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <BR>&gt; ! Check solution and clean up<BR>&gt; ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <BR>&gt; <BR>&gt; ! Check the error<BR>&gt; call VecAXPY(x,neg_one,u,ierr)<BR>&gt; ^^^^^^^^^^^^^^^^^^^<BR>&gt; x = x - 1.0* u; and hence changes x<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; On Jan 2, 2011, at 11:35 PM, Peter Wang wrote:<BR>&gt; <BR>&gt; &gt; Thanks, Barry, <BR>&gt; &gt; when you said,<BR>&gt; &gt; &gt; x is computed in the code as the difference between the "exact" solution and the "computed" solution.<BR>&gt; &gt; Does it mean x is not the solution? <BR>&gt; &gt; <BR>&gt; &gt; In the webpage document for KSPSolve, the x is defined as :<BR>&gt; &gt; Parameter<BR>&gt; &gt; ksp - iterative context obtained from KSPCreate()<BR>&gt; &gt; b - the right hand side vector<BR>&gt; &gt; x - the solution<BR>&gt; &gt; <BR>&gt; &gt; Why is x the difference in this example code? what is the solution,then?<BR>&gt; &gt; <BR>&gt; &gt; <BR>&gt; &gt; &gt; From: bsmith@mcs.anl.gov<BR>&gt; &gt; &gt; Date: Sun, 2 Jan 2011 22:55:00 -0600<BR>&gt; &gt; &gt; To: petsc-users@mcs.anl.gov<BR>&gt; &gt; &gt; Subject: Re: [petsc-users] result of ex2f.F in petsc-3.1-p5\src\ksp\ksp\examples\tutorials<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; On Jan 2, 2011, at 9:32 PM, Peter Wang wrote:<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; I added VecView() in the ex2f.F to check the three vectors (u,b, and x) in the code.<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; -----The vectors of u and b are same. BUt, the value of vector x is different with different processes. For example,<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; with only 1 process, the vector x is:<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; Process [0]<BR>&gt; &gt; &gt; &gt; 2.72322e-07<BR>&gt; &gt; &gt; &gt; 3.81437e-07<BR>&gt; &gt; &gt; &gt; 1.58922e-07<BR>&gt; &gt; &gt; &gt; 3.81437e-07<BR>&gt; &gt; &gt; &gt; 2.38878e-07<BR>&gt; &gt; &gt; &gt; -6.65645e-07<BR>&gt; &gt; &gt; &gt; 1.58922e-07<BR>&gt; &gt; &gt; &gt; -6.65645e-07<BR>&gt; &gt; &gt; &gt; -2.51219e-07<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; with 2 processes, the vector is:<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; Process [0]<BR>&gt; &gt; &gt; &gt; -1.11022e-16<BR>&gt; &gt; &gt; &gt; 0<BR>&gt; &gt; &gt; &gt; 2.22045e-16<BR>&gt; &gt; &gt; &gt; 2.22045e-16<BR>&gt; &gt; &gt; &gt; 0<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; Process [1]<BR>&gt; &gt; &gt; &gt; 2.22045e-16<BR>&gt; &gt; &gt; &gt; 2.22045e-16<BR>&gt; &gt; &gt; &gt; 0<BR>&gt; &gt; &gt; &gt; 2.22045e-16<BR>&gt; &gt; &gt; void PETSC_STDCALL kspbuildsolution_(KSP *ksp,Vec *v,Vec *V, int *ierr )<BR>&gt; &gt; &gt; {<BR>&gt; &gt; &gt; Vec vp = 0;<BR>&gt; &gt; &gt; CHKFORTRANNULLOBJECT(v);<BR>&gt; &gt; &gt; CHKFORTRANNULLOBJECT(V);<BR>&gt; &gt; &gt; if (v) vp = *v;<BR>&gt; &gt; &gt; *ierr = KSPBuildSolution(*ksp,vp,V);<BR>&gt; &gt; &gt; }<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; void PETSC_STDCALL kspbuildresidual_(KSP *ksp,Vec *t,Vec *v,Vec *V, int *ierr )<BR>&gt; &gt; &gt; {<BR>&gt; &gt; &gt; Vec tp = 0,vp = 0;<BR>&gt; &gt; &gt; CHKFORTRANNULLOBJECT(t);<BR>&gt; &gt; &gt; CHKFORTRANNULLOBJECT(v);<BR>&gt; &gt; &gt; CHKFORTRANNULLOBJECT(V);<BR>&gt; &gt; &gt; if (t) tp = *t;<BR>&gt; &gt; &gt; if (v) vp = *v;<BR>&gt; &gt; &gt; *ierr = KSPBuildResidual(*ksp,tp,vp,V);<BR>&gt; &gt; &gt; }<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; Barry<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; x is computed in the code as the difference between the "exact" solution and the "computed" solution. Since this example uses iterative solvers, which by default do not compute the solution to full accuracy, the "error" will be different for different number of processes. It is just a fluke that the error is smaller with two processes instead of one.<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; The example is supposed to get a vector x similar to u. Why the result is different with differnt number of processes used?<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; ----Also, if the runtime option -my_ksp_monitor is used, there is a error showing:<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; [0]PETSC ERROR: ------------------------------------------------------------------------<BR>&gt; &gt; &gt; &gt; [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; It seems there is something wrong with calling 'call KSPBuildSolution(ksp,PETSC_NULL_OBJECT,x,ierr)' in user defined function MyKSPMonitor().<BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; Any hints for this error? Thanks a lots.<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; Bug in our Fortran Interface for KSPBuildSolution() fortran interface in that case. If you replace the two functions in src/ksp/ksp/interface/ftn-custom/zitclf.c with the ones below and run make in that directory this monitor routine will work.<BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; &gt; <BR>&gt; &gt; &gt; <BR>&gt; <BR>                                               </body>
</html>