Testing restart functionality in C/C++

Hello!

I am trying to implement "restart" functionality in my code, where if for some reason the code stops (i.e. iterations drop) I can pick up from where I started.

Here's what I did so far:

1. Load last iteration data files as my initial conditions in main ICs loop
2. Load last iteration time as well, as my start time before starting iterations loop
3. Use last iteration time as initial time + dt and update
4. Update all variables with iteration loop and save

Now, this logic works fine for me and returns correct output for the first iteration only before it restarts everything from the start for the following iterations.

Here's an example output from my code, assume these are the expected "correct" output:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 Iteration = 1812 t = 5450.6521821332 phi_iter = 17 1.1069 1.66477 Iteration = 1813 t = 5452.3169561963 phi_iter = 13 2.60262 1.61918 Iteration = 1814 t = 5453.9361334358 phi_iter = 13 1.54781 1.54845 Iteration = 1815 t = 5455.4845819193 phi_iter = 17 1.00293 1.54042 Iteration = 1816 t = 5457.0250001012 phi_iter = 18 1.13051 1.54354 Iteration = 1817 t = 5458.5685399664 phi_iter = 19 2.35307 1.46759 Iteration = 1818 t = 5460.0361342678 phi_iter = 37 1.26484 1.18761 Iteration = 1819 t = 5461.2237438787 phi_iter = 1 1.46792 0.31029 Iteration = 1820 t = 5461.2547728417 phi_iter = 1

the two numbers I am printing out after each iteration, are for checks and represent speed and dt in my code respectively. Now, what I have implemented returns the following:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 Starting time at restart iteration (1812): 5448.964896 0.0001039246709 1.664772331 Iteration = 1812 t = 5450.6296687157 phi_iter = 10 7.39507552e-05 3.124999991 Iteration = 1813 t = 5453.7546687067 phi_iter = 5 7.54156341e-05 3.124999991 Iteration = 1814 t = 5456.8796686977 phi_iter = 5 7.398175426e-05 3.124999991 Iteration = 1815 t = 5460.0046686885 phi_iter = 5 7.552663193e-05 3.124999991 Iteration = 1816 t = 5463.1296686792 phi_iter = 5 7.750841083e-05 3.124999991 Iteration = 1817 t = 5466.2546686697 phi_iter = 5 7.821350503e-05 3.12499999 Iteration = 1818 t = 5469.3796686600 phi_iter = 5 7.954733822e-05 3.12499999 Iteration = 1819 t = 5472.5046686499 phi_iter = 5 8.031665434e-05 3.12499999

where for the first iteration : iteration, t, phi_iter, and dt look about right or correct, but everything else resets to my original initial conditions, as if I am overwriting something. The issue is testing this code on small scale, i.e updating time and what not works but the moment I implement on large-scale things get messed up. I have no idea what I am doing wrong with my logic.

The full code can be found here:
https://www.zipshare.com/download/eyJhcmNoaXZlSWQiOiJjYzAzZTMzNi03MzU4LTRiMjUtODdmYy00ZTg2MmM2NGEyZTAiLCJlbWFpbCI6ImFzdHJvbHVqeUBnbWFpbC5jb20ifQ==

Thanks!
Last edited on
you will get more help if you put it in a repo where we can see the code without downloading it.

That aside, check your logic.
when you want to restart, you need *everything* done up to that point. you have to save the loop iteration counter(s) and current value of every relevant variable, and your code should be like

for(int i = valuefromfile; i< endval; i++)
not for (i=0; ...)

and so on. its a lot like the code for undo/redo, only more complicated as most of those only take snapshots once an action is completed or before it starts, never in the middle. If you can afford to do so, using that approach or the next thing to it is better -- eg if you have nested loops, maybe wait for the innermost to finish and only save the outermost one as an in-progress .. anything you can afford to wait on and let finish so you can start it from scratch next time reduces the complexity of the problem.

I suspect from your symptoms you have something that is being initialized to a constant and not from the file values.
Topic archived. No new replies allowed.