Mercurial > repos > public > sbplib
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 |
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)); |