On Mar 25, 2022, at 1:14 PM, Xiong, Jing via petsc-users 
<[email protected]<mailto:[email protected]>> wrote:

Good afternoon,

Thanks for all your help.
I got a question about how to solve the DAE step by step using PETSC4PY.
I got two DAE systems, let's say f1(x1, u1) and f2(x2, u2). The simplified 
algorithm I need to implement is as follows:
Step 1: solve f1 for 1 step.
Step 2: use part of x1 as input for f2, which means u2 = x1[:n].
Step 3: solve f2 for one step with u2 = x1[:n].
Step 4: use part of x2 as input for f1, which means u1 = x2[:m].

I'm not able to find any examples of how to use PETSC4PY in such scenarios. If 
using the "scikits.odes.dae" package, it is like:
daesolver.init_step(timeInit, XInit, XpInit)
daesolver.step(time)

Jing,

You can certainly do the same thing in petsc4py with

ts.setMaxTime(t1)
ts.solve() // integrate over time interval [0,t1]
ts.setTime(t1)
ts.setMaxTime(t2)
ts.solve()  // integrate over time interval [t1,t2]
...

There are also APIs that allow you to control the step size (ts.setTimeStep) 
and the final step behavior (ts.setExactFinalTime).
The C example src/ts/tutorials/power_grid/stability_9bus/ex9busdmnetwork.c 
might be helpful to you. Most of the C examples can be reproduced in python 
with similar APIs.

Hong

Please let me know if there are any examples I can refer to. Thank you.

Best,
Jing

Reply via email to