Mercurial > repos > public > sbplib
annotate +noname/calculateSolution.m @ 1301:8978521b0f06 default
Fix incorrect package name.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Wed, 08 Jul 2020 19:11:04 +0200 |
parents | bd99ea1fc733 |
children |
rev | line source |
---|---|
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 % Calculates the solution of discretization for a given set of ms ts and orders. |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 % discrHand -- function handle to a Discretization constructor |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 % m -- grid parameter |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 % order -- order of accuracy of the approximtion |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 % T -- time to calculate solution for |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
6 % tsOpt -- options for the time stepper creation. |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 % input paramters m, t, order may all be vectors. |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
8 function [] = calculateSolution(filename, name, discrHand, m, T_in, order, tsOpt, force_flag) |
32
ddfb98209aa2
Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
25
diff
changeset
|
9 default_arg('force_flag',false); |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
10 default_arg('tsOpt', []); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 |
32
ddfb98209aa2
Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
25
diff
changeset
|
12 if exist(filename,'file') && ~force_flag |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 fprintf('File ''%s'' already exist.',filename); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 do_append = yesnoQuestion('Do you want to append to it?'); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 if ~do_append |
226 | 16 fprintf('Exiting. No Solutions calculated.\n'); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 return |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 sf = SolutionFile(filename); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 orderWidth = findFieldWidth('%d',order); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 mWidth = findFieldWidth('%d',m); |
40
54d3ab296ba0
Added Dictionary class. Added string conversions for a bunch of types. Deprecated some replaced functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
36
diff
changeset
|
25 TWidth = findFieldWidth('%d',T_in); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 for i = 1:length(order) |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 for j = 1:length(m) |
40
54d3ab296ba0
Added Dictionary class. Added string conversions for a bunch of types. Deprecated some replaced functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
36
diff
changeset
|
29 T = sort(T_in); % Make sure times are sorted |
54d3ab296ba0
Added Dictionary class. Added string conversions for a bunch of types. Deprecated some replaced functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
36
diff
changeset
|
30 |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 discr = discrHand(m(j),order(i)); |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
32 k_max = discr.getTimestep(tsOpt); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 % Do we want to to save the initial conditions? |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 if T(1) == 0 |
20
c7efff913935
Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
Jonatan Werpers <jonatan@werpers.com>
parents:
19
diff
changeset
|
36 snapshot = discr.getTimeSnapshot(0); |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
37 saveToFile(sf, name, order(i), m(j),T(1), snapshot, NaN, NaN, discr); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 T(1) = []; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 |
36
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
41 % Find out if times to be calulated are integer multiples of the smallest one. |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
42 time_multiples = T/T(1); |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
43 |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
44 is_int_multiples = all(time_multiples == int64(time_multiples)); |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
45 |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
46 if is_int_multiples |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
47 fprintf('Calculating time series in increments\n'); |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
48 else |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
49 fprintf('RESTARTING for each time in timeseries\n'); |
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
50 fprintf('If this is not what you want try giving T in integer multiples.\n'); |
36
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
51 end |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
52 |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 % T now contains all the times we need to step to, |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 % if T contained 0 it has now been removed. |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 if is_int_multiples |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 % Times are integer multiples, we can save time |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 [k,N] = alignedTimestep(k_max,T(1)); |
137
2b133d833668
Added forgotten setting of k.
Jonatan Werpers <jonatan@werpers.com>
parents:
136
diff
changeset
|
59 tsOpt.k = k; |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
60 ts = discr.getTimestepper(tsOpt); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 runtime = 0; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 for l = 1:length(T) |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 end_step = N * time_multiples(l); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 fprintf('[order = %-*d, m = %-*d, T = %-*d]: ',orderWidth,order(i),mWidth,m(j),TWidth,T(l)); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 clock_start = tic(); |
20
c7efff913935
Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
Jonatan Werpers <jonatan@werpers.com>
parents:
19
diff
changeset
|
66 ts.stepN(end_step-ts.n,true); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 runtime = runtime + toc(clock_start); |
20
c7efff913935
Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
Jonatan Werpers <jonatan@werpers.com>
parents:
19
diff
changeset
|
68 snapshot = discr.getTimeSnapshot(ts); |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
69 saveToFile(sf, name, order(i), m(j),T(l), snapshot, runtime, k, discr); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
70 fprintf('Done! (%.3fs)\n',runtime); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
71 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
72 else |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
73 % Times are not interger multiples, we have to start from 0 every time. |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
74 for l = 1:length(T) |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
75 [k,N] = alignedTimestep(k_max,T(l)); |
137
2b133d833668
Added forgotten setting of k.
Jonatan Werpers <jonatan@werpers.com>
parents:
136
diff
changeset
|
76 tsOpt.k = k; |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
77 ts = discr.getTimestepper(tsOpt); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
78 fprintf('[order = %-*d, m = %-*d, T = %-*d]: ',orderWidth,order(i),mWidth,m(j),TWidth,T(l)); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
79 clock_start = tic(); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
80 [v,t] = ts.stepN(N-ts.n,true); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
81 runtime = toc(clock_start); |
20
c7efff913935
Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
Jonatan Werpers <jonatan@werpers.com>
parents:
19
diff
changeset
|
82 snapshot = discr.getTimeSnapshot(ts); |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
83 saveToFile(sf, name, order(i), m(j),T(l), snapshot, runtime, k, discr); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
84 fprintf('Done! (%.3fs)\n',runtime); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
85 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
86 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
87 end |
32
ddfb98209aa2
Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
25
diff
changeset
|
88 sf.stupidSave(); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
89 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
90 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
91 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
92 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
93 |
136
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
94 function saveToFile(sf, name, order, m, T, snapshot, runtime, k, discr) |
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
95 key.name = name; |
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
96 key.order = order; |
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
97 key.m = m; |
8298734b1938
Updated noname.calculateSolution to use the opt struct.
Jonatan Werpers <jonatan@werpers.com>
parents:
40
diff
changeset
|
98 key.T = T; |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
99 |
20
c7efff913935
Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
Jonatan Werpers <jonatan@werpers.com>
parents:
19
diff
changeset
|
100 entry.repr = snapshot; |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
101 entry.runtime = runtime; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
102 entry.k = k; |
25
791decafe6e4
Made calculateSolution save the discretization instead of a handle to contructor.
Jonatan Werpers <jonatan@werpers.com>
parents:
20
diff
changeset
|
103 entry.discr = discr; |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
104 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
105 sf.store(key,entry); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
106 end |