Sure, I was suggesting you might implement it for your one-needed 
TSView_*/TSLoad_*. With a single template done we can easily add the rest.

  I agree having an API to start with multiple solutions is a good idea and 
would be needed for any TSView_*/TSLoad_*. so that may be the simplest
way for you to get started.  Or we can look at providing the new API if it is 
out of scope for you.

  Barry

> On Jan 2, 2025, at 5:47 PM, David Kamensky <da...@coreform.com> wrote:
> 
>> Are you up to trying this by adding this functionality to TSView_*/TSLoad_*, 
>> or should we try to fit in time to add this (needed) support?
> 
> I'll have to consult with the team to decide what direction we want to go.  
> We may want to keep our restart data in a neutral format to support other 
> uses of it (e.g., solution postprocessing), or to maintain consistency and 
> interoperability with some of our non-PETSc time steppers (so that we can, 
> e.g., restart from an intermediate step of a PETSc `TS` using a non-PETSc 
> integrator).  If we do stick with our more manual re-initialization of the 
> `TS`, it might be preferable for us to implement an initialization option 
> that allows us to provide an acceleration.  (This would be useful even for 
> purposes other than restarting, if a user has a cheaper problem-specific 
> method for computing the initial acceleration, e.g., inverting a mass matrix 
> against the initial configuration's force vector.)
> 
> In any case, getting consistent view/load behavior across all time 
> integrators and testing it thoroughly would be significantly larger in scope 
> than what we need.
> 
> Best, David
> 
> On Thu, Jan 2, 2025 at 2:16 PM Barry Smith <bsm...@petsc.dev 
> <mailto:bsm...@petsc.dev>> wrote:
>> 
>>   David,
>> 
>>     I think Stefano was saying the TSView/Load approach should be improved 
>> to save the additional vector(s) and use them in the restart. 
>> 
>>     Are you up to trying this by adding this functionality to 
>> TSView_*/TSLoad_*, or should we try to fit in time to add this (needed) 
>> support?
>> 
>>     Barry
>> 
>> 
>>> On Jan 2, 2025, at 2:34 PM, David Kamensky via petsc-users 
>>> <petsc-users@mcs.anl.gov <mailto:petsc-users@mcs.anl.gov>> wrote:
>>> 
>>>> How are you currently restarting the simulation?
>>> 
>>> I just reviewed the code, and we're not currently using the `TSView/Load` 
>>> functions.  We're just manually (de)serializing displacement, velocity, and 
>>> acceleration data using a neutral format, populating PETSc `Vec`s with this 
>>> data, and associating them with a new `TS` object via `TS2SetSolution` (and 
>>> setting other relevant data, like time, time step size, etc.).  However, 
>>> `TS2SetSolution` only accepts displacement and velocity.
>>> 
>>>> I think the correct way to handle this is to support storing/loading these 
>>>> extra vectors via TSView()/TSLoad().
>>> 
>>> I took a quick look at the implementations of `TSView/Load`, and it looks 
>>> like the "base class" (to borrow some OOP terminology) implementation in 
>>> `ts/interface/ts.c` only saves/loads the solution vector, while the 
>>> subclass-specific logic from `TSView_Alpha` in 
>>> `ts/impls/implicit/alpha/alpha2.c` only adds some additional output writing 
>>> the generalized-alpha parameters to ASCII viewers (and similar for BDF).  
>>> So, following the `TSView/Load` path, I don't see where it would even 
>>> save/load the velocity vector for 2nd-order-in-time integrators.  Is it the 
>>> case that this functionality is known to be incomplete, and you're 
>>> suggesting that the best path forward would be to update it?
>>> 
>>> Thanks, David
>>> 
>>> 
>>> On Thu, Jan 2, 2025 at 10:41 AM Stefano Zampini <stefano.zamp...@gmail.com 
>>> <mailto:stefano.zamp...@gmail.com>> wrote:
>>>> Note that BDF has the same issue. I think the correct way to handle this 
>>>> is to support storing/loading these extra vectors via TSView()/TSLoad().
>>>> How are you currently restarting the simulation?
>>>> 
>>>> Il giorno gio 2 gen 2025 alle ore 19:25 David Kamensky via petsc-users 
>>>> <petsc-users@mcs.anl.gov <mailto:petsc-users@mcs.anl.gov>> ha scritto:
>>>>> Hi,
>>>>> 
>>>>> I've recently been helping some co-workers with restarting PETSc time 
>>>>> integrators from saved solution data.
>>>>> 
>>>>> It looks like the only supported path for restarting the 
>>>>> generalized-alpha integrator for 2nd-order-in-time systems (`TSALPHA2`) 
>>>>> is to follow the same procedure as initialization, in which two 
>>>>> first-order-accurate half-steps are used to estimate an acceleration from 
>>>>> the given displacement and velocity.  However, the resulting acceleration 
>>>>> is not exactly equivalent to the intermediate one that would have been 
>>>>> used by the integrator if the integration simply proceeded without 
>>>>> restarting.  This prevents exact reproducibility of computations from 
>>>>> saved intermediate results.  (An analogous issue would also affect 
>>>>> `TSALPHA` for first-order-in-time problems, where velocity is estimated 
>>>>> on initialization/restart.)
>>>>> 
>>>>> Am I misunderstanding this, or missing a better method of restarting the 
>>>>> 2nd-order generalized-alpha integrator?  If not, would there be interest 
>>>>> in adding an alternate initialization/restart option to the `TSALPHA2` 
>>>>> integrator that takes a user-provided `Vec` for the initial/intermediate 
>>>>> acceleration, and skips over the half-step estimation procedure?
>>>>> 
>>>>> Thanks, David
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Stefano
>> 

Reply via email to