Mercurial > repos > public > sbplib
annotate +noname/calculateErrors.m @ 774:66eb4a2bbb72 feature/grids
Remove default scaling of the system.
The scaling doens't seem to help actual solutions. One example that fails in the flexural code.
With large timesteps the solutions seems to blow up. One particular example is profilePresentation
on the tdb_presentation_figures branch with k = 0.0005
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 18 Jul 2018 15:42:52 -0700 |
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)); |