annotate +noname/calculateSolution.m @ 20:c7efff913935

Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 22 Sep 2015 17:35:58 +0200
parents 1644d000c304
children 791decafe6e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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.
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 function [] = calculateSolution(filename, discrHand, method, m, T, order)
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 if exist(filename,'file')
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 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
12 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
13 if ~do_append
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 fprintf('Exiting...\n');
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 return
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 end
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
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 sf = SolutionFile(filename);
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 % Make sure times are sorted
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 T = sort(T);
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 % Find out if times to be calulated are integer multiples of the smallest one.
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 time_multiples = T/T(1);
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 is_int_multiples = all(time_multiples == int64(time_multiples));
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 if is_int_multiples
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 fprintf('Calculating time series in increments\n');
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 else
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 fprintf('Restarting for each time in timeseries\n');
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 end
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
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 orderWidth = findFieldWidth('%d',order);
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 mWidth = findFieldWidth('%d',m);
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 TWidth = findFieldWidth('%d',T);
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 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
40 for j = 1:length(m)
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 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
42 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
43
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 % 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
45 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
46 snapshot = discr.getTimeSnapshot(0);
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
47 saveToFile(sf, method, order(i), m(j),T(1), snapshot, NaN, NaN, discrHand);
17
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 T(1) = [];
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 end
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 % 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
52 % 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
53
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 if is_int_multiples
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 % 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
56 [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
57 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
58 runtime = 0;
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 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
60 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
61 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
62 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
63 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
64 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
65 snapshot = discr.getTimeSnapshot(ts);
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 saveToFile(sf, method, order(i), m(j),T(l), snapshot, runtime, k, discrHand);
17
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 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
68 end
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 else
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 % 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
71 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
72 [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
73 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
74 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
75 clock_start = tic();
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 [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
77 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
78 snapshot = discr.getTimeSnapshot(ts);
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
79 saveToFile(sf, method, order(i), m(j),T(l), snapshot, runtime, k, discrHand);
17
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 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
81 end
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82
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
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 end
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
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89
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
90 function saveToFile(sf, method, order, m, T, snapshot, runtime, k, discrHand)
17
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 key.method = method;
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92 key.order = order;
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 key.m = m;
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94 key.T = T;
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95
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
96 entry.repr = snapshot;
17
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 entry.runtime = runtime;
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 entry.k = k;
19
1644d000c304 Fixed bug in SolutionsFile.m. Updated calculateSolution to also save a function handle to the Discr constructor.
Jonatan Werpers <jonatan@werpers.com>
parents: 17
diff changeset
99 entry.discrHand = discrHand;
17
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101 sf.store(key,entry);
30ae48efc7ae Added utility function findFiledWidth. Added function for calculating and saving solutions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
102 end