Mercurial > repos > public > sbplib
annotate +noname/calculateSolution.m @ 1037:2d7ba44340d0 feature/burgers1d
Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Fri, 18 Jan 2019 09:02:02 +0100 |
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 |