Mercurial > repos > public > sbplib
annotate +noname/calculateSolution.m @ 87:0a29a60e0b21
In Curve: Rearranged for speed. arc_length_fun is now a property of Curve. If it is not supplied, it is computed via the derivative and spline fitting. Switching to the arc length parameterization is much faster now. The new stuff can be tested with testArcLength.m (which should be deleted after that).
author | Martin Almquist <martin.almquist@it.uu.se> |
---|---|
date | Sun, 29 Nov 2015 22:23:09 +0100 |
parents | 54d3ab296ba0 |
children | 8298734b1938 |
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 % method -- time stepping method |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 % m -- grid parameter |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 % 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
|
6 % T -- time to calculate solution for |
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. |
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
|
8 function [] = calculateSolution(filename, discrHand, method, m, T_in, order, 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); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 |
32
ddfb98209aa2
Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
25
diff
changeset
|
11 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
|
12 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
|
13 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
|
14 if ~do_append |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 fprintf('Exiting...\n'); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 return |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 end |
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 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 sf = SolutionFile(filename); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 |
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 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 orderWidth = findFieldWidth('%d',order); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 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
|
26 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
|
27 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 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
|
29 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
|
30 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
|
31 |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 discr = discrHand(m(j),order(i)); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 k_max = discr.getTimestep(method); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 % 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
|
36 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
|
37 snapshot = discr.getTimeSnapshot(0); |
25
791decafe6e4
Made calculateSolution save the discretization instead of a handle to contructor.
Jonatan Werpers <jonatan@werpers.com>
parents:
20
diff
changeset
|
38 saveToFile(sf, method, 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
|
39 T(1) = []; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 |
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
|
42 % 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
|
43 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
|
44 |
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 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
|
46 |
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 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
|
48 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
|
49 else |
c6eb3af205c0
Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents:
32
diff
changeset
|
50 fprintf('Restarting for each time in timeseries\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
|
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)); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 ts = discr.getTimestepper(method,k); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 runtime = 0; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 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
|
62 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
|
63 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
|
64 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
|
65 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
|
66 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
|
67 snapshot = discr.getTimeSnapshot(ts); |
25
791decafe6e4
Made calculateSolution save the discretization instead of a handle to contructor.
Jonatan Werpers <jonatan@werpers.com>
parents:
20
diff
changeset
|
68 saveToFile(sf, method, 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
|
69 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
|
70 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
71 else |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
72 % 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
|
73 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
|
74 [k,N] = alignedTimestep(k_max,T(l)); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
75 ts = discr.getTimestepper(method,k); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
76 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
|
77 clock_start = tic(); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
78 [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
|
79 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
|
80 snapshot = discr.getTimeSnapshot(ts); |
25
791decafe6e4
Made calculateSolution save the discretization instead of a handle to contructor.
Jonatan Werpers <jonatan@werpers.com>
parents:
20
diff
changeset
|
81 saveToFile(sf, method, 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
|
82 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
|
83 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
84 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
85 end |
32
ddfb98209aa2
Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
25
diff
changeset
|
86 sf.stupidSave(); |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
87 end |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
88 end |
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 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
91 |
25
791decafe6e4
Made calculateSolution save the discretization instead of a handle to contructor.
Jonatan Werpers <jonatan@werpers.com>
parents:
20
diff
changeset
|
92 function saveToFile(sf, method, order, m, T, 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
|
93 key.method = method; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
94 key.order = order; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
95 key.m = m; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
96 key.T = T; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
97 |
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
|
98 entry.repr = snapshot; |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
99 entry.runtime = runtime; |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
100 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
|
101 entry.discr = discr; |
17
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
102 |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
103 sf.store(key,entry); |
30ae48efc7ae
Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
104 end |