<div dir="ltr"><div><br></div><div>Thank you very much for the insight. It helped.</div><div><br></div><div>I am trying to solve the system using <b>snes </b>routines. Let's say the I execute the below command in Fortran</div><div><br></div><div><div><span class="Apple-tab-span" style="white-space:pre">    </span>call <b>SNESSolve</b>(snes,PETSC_NULL_OBJECT,xvec,ierr)</div></div><div><br></div><div>In the residual calculation and Jacobian update routines I need to finalize the vectors and matrix assemblies using the commands as following otherwise <b>SNESSolve</b> will crash:</div><div><br></div><div><div><span class="Apple-tab-span" style="white-space:pre">        </span>call <b>VecAssemblyBegin </b>(FVEC, ierr)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>call <b>VecAssemblyEnd   </b>(FVEC, ierr)</div></div><div><br></div><div><div>        call <b>MatAssemblyBegin</b>(jac_prec,MAT_FINAL_ASSEMBLY,ierr)</div><div>        call <b>MatAssemblyEnd</b>(jac_prec,MAT_FINAL_ASSEMBLY,ierr)</div></div><div><br></div><div>I face the issue that my debugger crashes at the locations of theses final vector and matrix assemblies. It worked for the sequential version of the code but for the parallel version it stops there. I am sure all processors in the mpi framework reach to these pointers simultaneously. Any insights?</div><div><br></div><div>Thanks,</div><div>Reza </div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 17, 2015 at 2:25 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  Reza,<br>
<br>
    See src/snes/examples/tutorials/ex5f90.F for how this may be easily done using a Fortran user defined type<br>
<span class="HOEnZb"><font color="#888888"><br>
  Barry<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> On Aug 17, 2015, at 12:39 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
><br>
> On Mon, Aug 17, 2015 at 11:46 AM, Reza Yaghmaie <<a href="mailto:reza.yaghmaie2@gmail.com">reza.yaghmaie2@gmail.com</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> I have problems with passing variables through  SNESSetFunction in my code. basically I have the following subroutines in the main body of the Fortran code. Could you provide some insight on how to transfer variables into the residual calculation routine (FormFunction1)?<br>
><br>
> Extra arguments to your FormFunction are meant to be passed in a context, through the context variable.<br>
><br>
> This is difficult in Fortran, but you can use a PetscObject as a container. You can attach other<br>
> PetscObjects using PetscObjectCompose() in Fortran.<br>
><br>
>    Matt<br>
><br>
> Thanks,<br>
> Reza<br>
> ------------------------------------------------------------------------------------------------------------------<br>
> main code<br>
><br>
>       SNES      snes<br>
>       Vec          xvec,rvec<br>
>       external   FormFunction1<br>
>       real*8       variable1(10),variable2(20,20),variable3(30),variable4(40,40)<br>
><br>
><br>
>       call SNESSetFunction(snes,rvec,FormFunction1,<br>
>      &                PETSC_NULL_OBJECT,<br>
>      &                variable1,variable2,variable3,variable4,<br>
>      &                ierr)<br>
><br>
>       end<br>
><br>
>       subroutine FormFunction1(snes,XVEC,FVEC,<br>
>      &                dummy,<br>
>      &                varable1,varable2,varable3,varable4,<br>
>      &                ierr)<br>
><br>
>       SNES                      snes<br>
>       Vec                         XVEC,FVEC<br>
>       PetscFortranAddr    dummy<br>
>       real*8                       variable1(10),variable2(20,20),variable3(30),variable4(40,40)<br>
><br>
><br>
>       return<br>
>       end<br>
> --------------------------------------------------------------------------------------------------------------<br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
> --<br>
> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
> -- Norbert Wiener<br>
<br>
</div></div></blockquote></div><br></div>