It seems that you do not intend to do an offline analysis on the solutions. If 
the goal is just to get the solutions at each step on the fly, you can probably 
also try TSSetTimeSpan() and TSGetTimeSpanSolutions(). They can give you an 
array of solution vectors at the time points you specify beforehand.

https://petsc.org/main/docs/manualpages/TS/TSSetTimeSpan/

Hong (Mr.)

On Dec 14, 2022, at 12:07 PM, Guglielmo, Tyler Hardy via petsc-users 
<[email protected]<mailto:[email protected]>> wrote:

Thanks Matt,

I’m a bit confused on where the trajectory is being stored in the TSTrajectory 
object.

Basically I have run

TSSetSaveTrajectory(ts);
…
TSSolve(ts, x);
TSTrajectory tj;
TSGetTrajectory(ts, &tj);
TSTrajectorySetType(tj, ts, TSTRAJECTORYMEMORY);

How is the object supposed to be accessed to find the entire trajectory?  I 
couldn’t find a clear example of where this is laid out in the documentation.

The TSTrajectory object looks like some complicated struct, but parsing which 
pointer is pointing to the solution has alluded me.

Thanks for your time!

Best,
Tyler


From: Matthew Knepley <[email protected]<mailto:[email protected]>>
Date: Tuesday, December 13, 2022 at 6:41 AM
To: Guglielmo, Tyler Hardy <[email protected]<mailto:[email protected]>>
Cc: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Subject: Re: [petsc-users] Saving solution with monitor function
On Tue, Dec 13, 2022 at 8:40 AM Guglielmo, Tyler Hardy via petsc-users 
<[email protected]<mailto:[email protected]>> wrote:
Hi all,

I am a new PETSc user (and new to MPI in general), and was wondering if someone 
could help me out with what I am sure is a basic question (if this is not the 
appropriate email list or there is a better place please let me know!).

Basically, I am writing a code that requires a solution to an ODE that will be 
used later on during runtime.  I have written the basic ODE solver using TSRK, 
however I haven’t thought of a good way to store the actual solution at all 
time steps throughout the time evolution.  I would like to avoid writing each 
time step to a file through the monitor function, and instead just plug each 
time step into an array.

How is this usually done?  I suppose the user defined struct that gets passed 
into the monitor function could contain a pointer to an array in main?  This is 
how I would do this if the program wasn’t of the MPI variety, but I am not sure 
how to properly declare a pointer to an array declared as Vec and built through 
the usual PETSc process.  Any tips are greatly appreciated

I think this is what TSTrajectory is for. I believe you want 
https://petsc.org/main/docs/manualpages/TS/TSTRAJECTORYMEMORY/<https://urldefense.us/v3/__https:/petsc.org/main/docs/manualpages/TS/TSTRAJECTORYMEMORY/__;!!G2kpM7uM-TzIFchu!irkbXWpYDosRslumKjVGCqxHkKyU-riye4i1dWe58HYH_sFxImRj33gOkhB2sgd_duk$>

  Thanks,

      Matt

Thanks for your time,
Tyler

+++++++++++++++++++++++++++++
Tyler Guglielmo
Postdoctoral Researcher
Lawrence Livermore National Lab
Office: 925-423-6186
Cell: 210-480-8000
+++++++++++++++++++++++++++++


--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<https://urldefense.us/v3/__http:/www.cse.buffalo.edu/*knepley/__;fg!!G2kpM7uM-TzIFchu!irkbXWpYDosRslumKjVGCqxHkKyU-riye4i1dWe58HYH_sFxImRj33gOkhB27-uscIw$>

Reply via email to