annotate +noname/calculateErrors.m @ 1031:2ef20d00b386 feature/advectionRV

For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 17 Jan 2019 10:25:06 +0100
parents 1201eb16557e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
616
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 % [discr, trueSolution] = schemeFactory(m)
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 % where trueSolution should be a timeSnapshot of the true solution a time T
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 % T is the end time
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 % m are grid size parameters.
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 % N are number of timesteps to use for each gird size
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 % timeOpt are options for the timeStepper
658
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
7 % errorFun is a function_handle taking 2 or 3 arguments, errorFun(trueSolution, approxSolution), errorFun(trueSolution, approxSolution, discr)
616
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 function e = calculateErrors(schemeFactory, T, m, N, errorFun, timeOpt)
657
b59345f905f0 Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents: 616
diff changeset
9 %TODO: Ability to choose paralell or not
616
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 assertType(schemeFactory, 'function_handle');
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 assertNumberOfArguments(schemeFactory, 1);
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 assertScalar(T);
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 assert(length(m) == length(N), 'Vectors m and N must have the same length');
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 assertType(errorFun, 'function_handle');
658
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
15
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
16 if ~ismember(nargin(errorFun), [2,3])
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
17 error('sbplib:noname:calculateErrors:wrongNumberOfArguments', '"%s" must have 2 or 3, found %d', toString(errorFun), nargin(errorFun));
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
18 end
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
19
657
b59345f905f0 Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents: 616
diff changeset
20 default_arg('timeOpt', struct());
b59345f905f0 Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents: 616
diff changeset
21
616
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
658
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
23 e = zeros(1,length(m));
657
b59345f905f0 Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents: 616
diff changeset
24 parfor i = 1:length(m)
616
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 done = timeTask('m = %3d ', m(i));
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 [discr, trueSolution] = schemeFactory(m(i));
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
657
b59345f905f0 Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents: 616
diff changeset
29 timeOptTemp = timeOpt;
b59345f905f0 Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents: 616
diff changeset
30 timeOptTemp.k = T/N(i);
b59345f905f0 Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents: 616
diff changeset
31 ts = discr.getTimestepper(timeOptTemp);
616
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 ts.stepTo(N(i), true);
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 approxSolution = discr.getTimeSnapshot(ts);
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34
658
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
35 switch nargin(errorFun)
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
36 case 2
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
37 e(i) = errorFun(trueSolution, approxSolution);
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
38 case 3
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
39 e(i) = errorFun(trueSolution, approxSolution, discr);
1201eb16557e Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents: 657
diff changeset
40 end
616
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 fprintf('e = %.4e', e(i))
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 done()
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 end
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 fprintf('\n')
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 end
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 %% Example error function
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 % u_true = grid.evalOn(dr.grid, @(x,y)trueSolution(T,x,y));
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 % err = u_true-u_false;
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 % e(i) = norm(err)/norm(u_true);
818d52d4928f Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 % % e(i) = sqrt(err'*d.H*d.J*err/(u_true'*d.H*d.J*u_true));