<div dir="ltr"><div dir="ltr">On Thu, Nov 19, 2020 at 10:05 AM Praharsh Suryadevara <<a href="mailto:surya031@umn.edu">surya031@umn.edu</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thanks!<br>
 The main reason is I want to be able to use SNES within CVODE as they<br>
state in the sundials manual; however, the notes in the documentation<br>
here <a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSUNDIALS.html" rel="noreferrer" target="_blank">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSUNDIALS.html</a><br>
states that it uses the sundials, internal solver. Is there a way<br>
around that?<br></blockquote><div><br></div><div>You are correct that the TSSUNDIALS uses their internal solver. So</div><div><br></div><div>1) you can make a bug report to SUNDIALS to get them to fix the PETSc interface, or</div><div><br></div><div>2) see if you can use an equivalent stepper in TS</div><div><br></div><div>Maybe we can do 2) while we wait for 1)?</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Thanks,<br>
Praharsh<br>
<br>
On Thu, Nov 19, 2020 at 7:36 AM Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> wrote:<br>
><br>
> On Wed, Nov 18, 2020 at 11:11 PM Praharsh Suryadevara via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
>><br>
>> Hi All,<br>
>> I asked this on StackOverflow but I realized it's better off asked here,<br>
>><br>
>> I'm trying to use the CVODE_PETSc interface, and I've been getting<br>
>> memory corruption errors I couldn't understand, so I tried to make a<br>
>> minimal reproducible example for one below. Running this,<br>
><br>
><br>
> There is a bug in CVODE's PETSc interface:<br>
><br>
> ==16192== Invalid write of size 8<br>
> ==16192==    at 0x4E4553C: N_VNewEmpty_Petsc (in /home/praharsh/.local/lib/libsundials_nvecpetsc.so.5.5.0)<br>
> ==16192==    by 0x4E45630: N_VMake_Petsc (in /home/praharsh/.local/lib/libsundials_nvecpetsc.so.5.5.0)<br>
> ==16192==    by 0x108AF8: main (in /home/praharsh/.local/examples/cvode/petsc/cv_petsc_ex7)<br>
> ==16192==  Address 0xfaf8708 is 0 bytes after a block of size 392 alloc'd<br>
> ==16192==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)<br>
> ==16192==    by 0x4044922: ??? (in /var/empty/local/lib/libsundials_cvode.so.5.3.0)<br>
> ==16192==    by 0x84000001: ???<br>
> ==16192==    by 0x4E4532E: N_VNewEmpty_Petsc (in /home/praharsh/.local/lib/libsundials_nvecpetsc.so.5.5.0)<br>
> ==16192==    by 0x4E45630: N_VMake_Petsc (in /home/praharsh/.local/lib/libsundials_nvecpetsc.so.5.5.0)<br>
> ==16192==    by 0x108AF8: main (in /home/praharsh/.local/examples/cvode/petsc/cv_petsc_ex7)<br>
><br>
> An alternative is to use CVODE through PETSc, meaning you would configure using --download-sundials, and<br>
> then use the CVODE solvers from Sundials.<br>
><br>
>   Thanks,<br>
><br>
>     Matt<br>
><br>
>><br>
>> int main(int argc,char **argv)<br>
>><br>
>> {<br>
>>     N_Vector           nvecx;<br>
>>     PetscErrorCode       ierr;<br>
>>     Vec                  x;<br>
>>     int nr_dof = 3;<br>
>>     PetscInitializeNoArguments();<br>
>>     VecCreateSeq(PETSC_COMM_SELF, nr_dof, &x);<br>
>>     VecZeroEntries(x);<br>
>>     VecAssemblyBegin(x);<br>
>>     VecAssemblyEnd(x);<br>
>>     nvecx = N_VMake_Petsc(x);<br>
>>     if (check_retval((void *)nvecx, "N_VMake_Petsc", 0)) return 1;<br>
>>     N_VDestroy(nvecx);<br>
>>     ierr = VecDestroy(&x);CHKERRQ(ierr);<br>
>>     printf("Corruption is happening below\n");<br>
>>     ierr = PetscFinalize();<br>
>>     printf("PETSC FINALIZE\n");<br>
>>     return ierr;<br>
>> }<br>
>><br>
>> gives me<br>
>><br>
>> Corruption is happening below<br>
>> double free or corruption (out)<br>
>> [1]    14133 abort (core dumped)  ./cv_petsc_ex7<br>
>><br>
>> I've also attached the output of valgrind --leak-check=full<br>
>> ./my_program_executable &> valgrind_output.log<br>
>> I'm not particularly sure why PetscFinalize is causing memory<br>
>> corruption here. I'm using Sundials 5.5.0 and Petsc 3.14.0. I don't<br>
>> really understand CVODE or PETSc internals or manual memory management<br>
>> well since I'm new to all of them. Any help pinpointing the issue<br>
>> would be appreciated.<br>
>><br>
>> Thank you!<br>
>> Praharsh<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>
> <a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>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</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>